2行与2000行同时返回的查询是什么?

时间:2019-04-01 15:39:17

标签: sql sql-server tsql

我有一个查询,该查询何时具有一个IN子句的变量:IN ('123', '456')

  • 如果我在IN()子句中放入两个项目,查询将在4秒后返回
  • 如果我将200个项目放在IN()子句中,查询仍然会在4秒内返回

查询是一个嵌套查询。

我尝试了调整,建立索引并将OPTIONS(FAST x)添加到查询中。翻了ARITHABORT ON和其他几个,没什么区别。

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'));

我希望结果能够以较少的项目过滤更快返回。

2 个答案:

答案 0 :(得分:1)

对于SQL Server,

4秒是 LONG TIME (长时间),无论您使用的是2项还是200。我也看到了这一点:

  

查询是嵌套查询

我建议使用此IN()子句以外的其他方法来提高效果。

但是IN()子句中的200个项目既不是典型的也不是特别好的做法。通常,最好找到一种方法来编写定义这些项目的SELECT语句,然后针对该JOIN编写APPLYSELECT

答案 1 :(得分:0)

我建议的解决方法如下:用<To href="">Contact Us</a> (嵌套查询)将条件where in替换为temporay表,在其中存储要查找的值。

脚本会是这样的

  1. 首先在inner join

  2. 中插入要查找的项目
  3. 然后运行这样的脚本

    myTempTable