我有一个查询,在Where 子句中没有is null
参数的情况下可以快速运行,但是当我将其重新添加到其中时,运行时间会超过10 分钟。
SELECT
Parent_FRID, Name, lvl2desc, capyr, crpprjamt, empprjamt,
othprjamt AS Other_Projected, Fcrprepamt, Femprepamt, Fothrepamt, NFcrprepamt,
NFemprepamt, NFothrepamt, crpamt, empamt, othamt, Audited, Previous_Corp_Amt,
Previous_Emp_Amt, Previous_Total_Projected, Previous_Total_Reported,
Previous_Audited, crpfnl, empfnl, othfnl
FROM
Camp_Sum_6_Current_14
WHERE
cnttyp IS NULL AND
lvl2 <> '1020' AND
doncls in ('AG','CO')
我已经尝试了一切,但还是无法弄清楚。我尝试了子查询。我尝试将原始表中的空值更改为“无”。当 is not null 时,相同的查询运行良好。
最佳答案
如果您在 doncls
上放置索引,这将允许 SQL-Server 非常快速地过滤 "AG"
和 "AC"
。然后其他条件将在非常减少的行集上运行。 (假设只有一小部分行具有“AG”或“AC”。)
lvl2
上的索引不会有太大帮助,因为该列上的条件被制定为排除。
根据 cnttyp
中有多少 NULL,索引也可以提供帮助。
索引只有在使用索引的条件非常有选择性的情况下才有帮助。 IE。如果索引有助于排除 95% 的行,那么它很有用。如果仅排除 50% 的行,表扫描或索引扫描可能会更快。
关于sql - WHERE 子句中的 IS NULL 导致查询运行缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26659767/