问题标签 [query-tuning]

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 投票
2 回答
961 浏览

sql - 导致聚集索引扫描的日期参数

我有以下查询

当我运行它并检查实际的执行计划时,我可以看到成本最高的运算符是聚集索引扫描(索引在 a.pred 上)

但是,如果我按如下方式更改查询

消除了索引扫描并使用了索引查找。

有人可以解释这是为什么吗?在我看来,这与变量中的值可以是任何值有关,因此 SQL 不知道如何计划执行。

有什么办法可以消除表扫描但仍然可以使用变量?(PS,这将被转换为以@StartDate 和@EndDate 作为参数的存储过程)

编辑

col2 是 DATETIME,但是,如果我将变量设为 DATETIME,问题仍然存在

0 投票
2 回答
449 浏览

performance - 在插入语句中使用 while 循环的性能问题

我正在使用 try catch 块来捕获具有约束错误的数据。例如。如果在非空列中插入 null 或插入重复记录或发生类型不匹配,则所有有错误的源记录都应转到错误日志表,其余记录应转到目标表。为此我使用try catch,所以我不能使用批量插入,因此使用While Loop逐行插入,这需要永远运行,因为我必须插入3000000条记录。有什么方法可以提高循环时的性能吗?所以它可以在最短的时间内插入 3000000 条记录?目前需要 2 小时或更长时间 :(

0 投票
0 回答
381 浏览

sql - 如何提高 UNION ALL WITH ORDER BY 的性能

表 A 有数十亿的数据,表 B 的记录量非常少。我们正在使用 UNION ALL 获取所有 A 和 B 的联合。当我们对视图查询进行排序时,获取记录需要很长时间,您知道如何提高性能吗?

0 投票
2 回答
329 浏览

mysql - 如何使用多个自连接和索引加速我的 Moodle mysql 查询

我创建了一个带有多个连接的查询,用于从多个表中获取数据。对于 5000 多条记录,它的工作速度非常慢。我已经检查并为查询中使用的每个表正确设置了索引。我尝试使用多个选项优化此查询,但它不起作用,我不完全理解 EXPLAIN 或 EXPLAIN EXTENDED 帮助。

=====

询问

===========================

mdl_scorm_scoes_track 表

mdl_scorm_scoes_track 表

0 投票
0 回答
53 浏览

sql - SQL Server 修复相关子查询以获得更好的性能?

SQL Server 2014

我正在尝试学习更好的 SQL 代码实践以提高性能。我正在继承一些旧代码,并想了解真正知道自己在做什么的人将如何改进它。

我试图将代码缩短为我现在正在处理的主要部分。似乎有比运行多个相关子查询更好的方法来获取原因代码(PersonalTraining、网球等)?但是,到目前为止,我无法让每个客户返回一行的结果。

第 3 方的最终结果必须保持不变。

客户可以有零到多个存储在表“asajoinmbr”中的原因代码

asajoinmbr

在此处输入图像描述

asambr

strcustr

关于改进此代码的任何部分的任何想法?

结果: 在此处输入图像描述

0 投票
1 回答
1675 浏览

sql-server-2012 - 使用带有附加条件的全文搜索搜索 1300 万条记录

使用附加条件执行 SQL Server 全文搜索时的性能问题。(SQL 服务器 2012)

我正在尝试根据搜索过滤器列表(表值参数)过​​滤数据,这将返回匹配过滤器的所有记录,而过滤器的单个记录没有表中的任何记录。

全文搜索索引已在表Names中列SNAME

在存储过程中,表类型参数SearchFilter用于传递名称和地址信息列表。

两个表都有超过 1400 万条记录,当我们使用过滤器列表中传递的 1000 条唯一记录执行该过程时,大约需要 7 分钟才能返回结果(1400 条记录)。

过滤条件是:包含(名称)和街道地址、城市、州、邮编完全匹配。

是否有任何替代方法可以避免 while 循环,因为 SQL ServerCONTAINS函数需要字符串值或变量?

0 投票
2 回答
154 浏览

oracle - 在 Oracle 中索引部分值

我正在创建一个复合索引。

我的查询就像

上面的查询只会返回几行(< 10),但我的前导列“A”不是很独特,可以返回 50 万条记录的值。

现在,如果我在上面运行查询,它会执行过多的逻辑读取,因为这将扫描所有值为 A=:1 的块。

是否有任何技巧/解决方法来索引部分数据。例如,只有该数据将进入 B IS NOT NULL 的索引。这将使我的索引非常紧凑和快速。

0 投票
1 回答
64 浏览

mysql - 大型 MYSQL 表的索引

希望你能允许我挑选你的大脑,这样我就可以在这个过程中获得一些知识。我们有 3 个表 - data_product、data_issuer、data_accountbalance

运行下面的查询时,系统需要大约一个小时来响应 -

data_issuer 和 data_product 都只有 100 条记录,但 data_accountbalance 非常大,大约有 15,384,358 条记录。

产生的解释计划如下 -

有人可以帮助调整查询,使其不需要一个小时即可运行吗?感谢您对我的任何指示。

0 投票
1 回答
224 浏览

sql-server-2012 - 在 SQL Query 中使用索引之外的列进行键查找

我有一个查询如下

正在使用的执行计划在这里

执行计划

Index1 定义为:

索引 2 定义为:

优化器在 Index1 上使用索引查找,然后使用键查找,因为 ActivityId、AnotherId、PersonId 在SELECT列表中但不在索引中。这对我来说很有意义。

但是,以下事情让我感到困惑:

  • 当 DeletedStatus 不在索引中但在WHERE子句中时,为什么优化器能够使用 Index1 进行索引查找?
  • 当 Index1 中不存在该列时,为什么 Index1 中的输出列表包含 EndTime?
  • 当 Index2 中没有这些列时,如何使用 Index2 输出 ActivityId、AnotherId、PersonId?

抱歉,我已经对计划和查询进行了伪匿名,所以我希望我做得正确!

0 投票
1 回答
51 浏览

sql - SQL Server - 有效生成范围内的日期

使用 SQL Server 2016。

我有一个存储过程,可以针对一系列日期生成选项列表。为了清楚起见,针对几天的运输选项,但对这里的细节并不重要。

存储过程的第一步会生成一个日期列表以存储其他数据,并且生成此列表所花费的时间比代码的余额要长得多。虽然这个过程很短,但调用次数意味着这段代码使系统承受的负载比其他任何东西都多。

考虑到这一点,我一直在测试几个选项的效率。

迭代公用表表达式:

一个while循环:

从预先填充的日期表中查找:

在效率方面,我进行了 1000 次测试,生成了一年的日期,结果如下:

  • CTE:10.0 秒
  • 时间:7.7 秒
  • 查询:2.6 秒

从这一点来看,查询绝对是更快的选择,但确实需要一个需要创建和维护的永久日期表。这意味着查询不再是“独立的”,并且可以请求给定日期范围之外的日期。

有谁知道为某个范围生成日期的任何更有效的方法,或者我可以应用于上述任何优化?

非常感谢。