Sql 对于2行和2000行,查询同时返回的是什么?
我有一个查询,当在子句中有一个Sql 对于2行和2000行,查询同时返回的是什么?,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有一个查询,当在子句中有一个变量时:在('123','456') 如果我在in()子句中放入两项,查询将在4秒钟后返回 如果我在in()子句中放入200个项目,查询仍然会在4秒内返回 该查询是一个嵌套查询 我尝试过调整、索引和向查询中添加选项(FAST x)。将ARITHABORT打开和其他一些,没有区别 SET NOCOUNT ON; SET ARITHABORT ON; SET QUOTED_IDENTIFIER OFF; SELECT columns FROM (SELEC
变量时:在('123','456')
- 如果我在
in()
子句中放入两项,查询将在4秒钟后返回
- 如果我在
in()
子句中放入200个项目,查询仍然会在4秒内返回
该查询是一个嵌套查询
我尝试过调整、索引和向查询中添加选项(FAST x)。将ARITHABORT打开
和其他一些,没有区别
SET NOCOUNT ON;
SET ARITHABORT ON;
SET QUOTED_IDENTIFIER OFF;
SELECT columns
FROM
(SELECT columns
FROM
(SELECT columns
FROM
(SELECT columns
FROM sometable
CROSS JOIN xyz_table) Level1
) Level2
) Level3
WHERE
items IN ('123', '456'));
我希望结果能够更快地返回,只需过滤较少的项目。我建议的解决方案如下:将中的where in
条件替换为内部联接(嵌套查询),以存储要查找的值的临时表
剧本应该是这样的
首先,在mytentable
然后运行这样的脚本
select t1.*
from myTable t1
inner join myTemTable t2 on t1.items = t2.items
对于Sql Server,4秒是很长的时间,无论您使用的是2项还是200项。我也看到了这一点:
该查询是一个嵌套查询
我建议,除了()中的IN
子句之外,还有其他因素在驱动这里的性能
但是in()
子句中的200项既不是典型的,也不是特别好的实践。通常,您最好找到一种方法来编写定义这些项的SELECT
语句,然后编写JOIN
或APPLY
,以应对SELECT
这样的深度嵌套查询可能是真正的性能杀手。您可能希望向我们展示实际的SQL或问题,以防我们能想出更好的方法。如果in不起作用,我建议您将您的项检入临时表并生成一个内部表join@KemalALGAZZAH也许内部连接更合适?@SeanLange,绝对合适!出于某种原因,我认为条件是“不在”,在这种情况下是“在”,最好使用内部连接如果没有索引,两个查询都可以进行完整的表扫描,在这种情况下,唯一的时间差异将是输出IO(在大多数情况下可以忽略不计)