问题标签 [sqlperformance]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
77 浏览

sql - 通过删除子查询提高查询速度

我希望加快此查询的速度。目前执行只需要 20 多秒,这太可怕了。

我找不到通过使用和 JOIN 函数删除子查询的方法。

SQL:

为了让您了解数据库结构,有两个主要表,一个 forusers和一个 for manual。其他表包含附加数据,并与用户 ID 和另一个名为manual以查看他们属于哪个数据库。

我遇到的问题是我需要该用户的数据来显示他们在其他表中是否有任何其他数据。当我使用 JOIN 函数对此进行测试时,该记录将从结果中完全删除。

我认为需要重写的查询的主要部分是LEFT JOINs. 我无法找到与此相同的方法:LEFT JOIN orders ON users.id = orders.user AND orders.id = (SELECT MAX(id) FROM orders WHERE status = 3 AND user = users.id)

0 投票
2 回答
868 浏览

sql - 执行的 SQL 视图中没有选择的列?

我无法想出正确的关键字来搜索这个问题的答案,所以如果它已经得到回答,我们深表歉意。

考虑以下 SQL 视图:

如果我运行以下查询,将执行子查询还是 SQL Server 优化查询?

我从性能的角度来看这个,比如说,如果视图有很多子查询(如果内部选择引用一个大表,聚合可能需要很长时间)。

我正在使用 SQL Server 2008 R2,但我很想知道 2012 年或 MySQL 的答案是否不同。

谢谢。

0 投票
2 回答
10406 浏览

sql - TSQL - 更快地使用 IN (list) 还是使用 NOT IN (list) 来处理一个小列表?

我的一列只能包含 4 个可能的值(val1val2val3val4)。

我需要在WHERE子句中添加一个额外的过滤器来排除这 4 个值之一(即val4)。

使用起来会更快吗NOT IN ('val4')IN ('val1','val2','val3')

0 投票
1 回答
4763 浏览

mysql - 使用 FInd_IN_SET vs IN 子句 MYSQL 存储过程

我有一个类似于下面的存储过程

Tag是一个Integer专栏。

我厌倦了将逗号分隔的值作为字符串传递到存储过程中,但它不起作用。然后我使用如下存储过程

这很好用,唯一的问题是我的表非常大 - 与运行直接 SQL 语句时的 IN 相比,数百万行和使用 FIND_IN_SET 花费的时间太长。

最好的性能优化选项是什么?

是否有一个拆分函数可以将 id 转换为整数并为 IN 子句解析它?我认为那将是最好的选择。有什么建议或想法吗?

0 投票
1 回答
25385 浏览

sql - SQL中如何将单行拆分为多行

我有一个如下所示的表..它有多个用于不同延迟的列

我想输出一个表格,将每一行分成多行,如下所示

......

现在,我正在做的就是这个

.... 很快

这在性能方面非常低效,因为我正在为每个 select 语句进行表扫描......当这个表很大时,查询需要很长时间......

有没有更好的更快的方法来做到这一点?可能正在使用自定义功能?

0 投票
2 回答
191 浏览

sql - 查询时间间隔时的 SQL 性能

我有一张tickets包含三个相关列的表:id,startfinishwherestartfinishare timestamps

我有第二张表 ( intervals),其中只有一个相关列是time point. time_point也是一个timestamptime_point总是每 15 分钟一次。即第二个表的内容是:

第一个表(票证)有 400 万条记录。第二个只有 96 条记录 (24 * 4)。

我必须选择在任何时候有多少张票是开放的time_point

我写了以下查询:(简化版)

这有效,但太慢了。问题是两个表之间没有真正的连接,我假设对每一行都执行了全表扫描。

我怎样才能在这里获得更好的性能?

谢谢!

编辑:这是一个 Oracle 数据库。

0 投票
2 回答
318 浏览

sql-server-2008 - 优化相关更新

如何提高以下查询的性能:

t拥有:

  • 最近_5_min - 钱为空 - 当然它是可以为空的,因为它只会被工作占用。
  • 价值 - 金钱非空
  • date - int, PK 与聚集索引。这是表中唯一的索引。

t有 900K 记录,统计数据是最新的,查询需要永远运行。

更新 1 - 我最初发布的查询生成的示例数据。

前:

后:

0 投票
1 回答
66 浏览

mysql - 如何获取表中一组记录所占用的空间?

我有一张名为 HUGETABLE 的表。我想在某些 Select where 条件下获取 HUGETABLE 中一组记录所消耗的大小。我目前正在使用以下查询来获取 KBS 中的表大小,除此之外还有其他改进的查询吗?:

TID 是索引字段

0 投票
4 回答
4608 浏览

c# - SQL Server 慢速插入 - SqlBulkCopy 性能

我有一个包含 3000 万行的数据库。PK 聚集索引是一个代码生成的GUID

表格如下:

简单地说,它是一个图像搜索引擎。

  • imageEventGUID是代码唯一标识符,
  • imageSHAID是图片 URL 的 SHA256
  • queryGUID是代码生成的 FK(为简洁起见,从 create 语句中排除)
  • eventType是分配给它是什么类型的事件的数字
  • eventValue通常是图像的 URI,例如“ http://mywebpage.com/images/image123456789.jpg

我定期使用非常标准的代码将 via SqlBulkCopy(from a DataTable) 插入到此表中:

我通常尝试在一次批量插入中插入 5k 到 10k 行。我从这个批量复制中得到了糟糕的插入结果。我曾经在 SSD 上运行这个数据库(只连接了 SATA 1),而且速度非常快(不到 500 毫秒)。我的 SSD 空间不足,所以我将 DB 换成了 1TB 7200 高速缓存旋转磁盘,此后完成时间超过 120 秒(120000 MS)。当批量插入运行时,我可以看到大约 1MB/秒的磁盘活动,CPU 使用率很低。

除了 PK,我在这个表上没有其他索引。

我对你的问题是:

你能看到任何明显的我做错的事情会导致这种情况吗?

这只是“您的旋转磁盘对于这种大小的数据库来说不够快”的情况吗?

插入此数据时到底发生了什么?因为它是聚集索引,所以在插入时它会重新排列磁盘上的数据页吗?它正在尝试插入本质上是无序的 GUIDS,因此这种“随机插入性质”可能导致读/写标题在磁盘上的不同页面上移动很多?

谢谢你的时间。

0 投票
1 回答
4349 浏览

sql - SQL Server:合并性能

我有一个包含 500 万行的数据库表。聚集索引是自增标识列。PK 是生成 256 字节的代码VARCHAR,它是 URL 的 SHA256 哈希,这是表上的非聚集索引。

表格如下:

  • imageSHAID是图像 URL 的 SHA256 哈希,例如“ http://blah.com/image1.jpg ”,它被哈希为 256 长度的 varchar。

  • imageGUID是一个代码生成的 guid,我在其中识别图像(稍后将用作索引,但现在我省略了此列作为索引)

  • imageURL是图像的完整 URL(最多 2000 个字符)

  • showCount是显示图像的次数,每次显示此特定图像时都会增加。

  • imageURLIndex是一个限制为 450 个字符的计算列,这允许我在 imageURL 上进行文本搜索,如果我选择的话,它是可索引的(再次为简洁省略索引)

  • autoIncID是聚集索引,应该允许更快地插入数据。

我定期从临时表合并到store_image表中。temp表结构如下(与store_image表非常相似):

运行合并过程时,我DataTable使用以下代码将 a 写入临时表:

然后我运行合并命令,showCount通过store_image从基于imageSHAID. 如果图像当前不存在于store_image表中,我创建它:

我通常会尝试store_image在任何一个合并过程中将临时表中的 2k-5k 行合并到表中。

我曾经在 SSD 上运行这个数据库(只连接了 SATA 1),而且速度非常快(不到 200 毫秒)。我的 SSD 空间不足,所以我将 DB 换成了 1TB 7200 高速缓存旋转磁盘,此后完成时间超过 6-100 秒(6000 - 100000MS)。当批量插入运行时,我可以看到大约 1MB-2MB/秒的磁盘活动,CPU 使用率很低。

这是该数据量的典型写入时间吗?对我来说似乎有点慢,是什么导致性能缓慢?当然,随着imageSHAID被索引,我们应该期望比这更快的查找时间?

任何帮助,将不胜感激。

谢谢你的时间。