当我们通过查询在所选数据总数上放置where子句时,查询非常慢

时间:2018-01-02 13:14:05

标签: sql sql-server

我正在运行一个查询,它根据6-7个表之间的连接选择数据。当我执行查询时,需要3-4秒才能完成。但是当我在获取的数据上放置where子句时,执行时间超过一分钟。我的查询是获取大量数据,所以我不能在这里写,但我遇到的情况解释如下:

Select Category,x,y,z
from 
(
---Sample Query
) as a

执行只需3-4秒。但是

Select Category,x,y,z
from 
(
---Sample Query
) as a
where category Like 'Spart%'

执行时间超过2-3分钟。

为什么在使用where子句时执行会花费更多时间?

2 个答案:

答案 0 :(得分:0)

如果您通过检查管理工作室的实际执行计划来使用MS SQL,则可能已建议创建索引

在任何情况下,您都应该添加查询使用的索引"类别"

如果您没有该表的索引,请按列"类别"和连接中使用的所有其他列或

请记住使用like' text%'你可以在索引扫描中结束而不是索引搜索

答案 1 :(得分:0)

如果没有看到完整的查询,就不可能确切地说出问题所在。优化器可能正在将WHERE推入"示例查询"以一种不高效的方式。可能可以通过更新表上的统计信息来解决,但更简单的选择是将整个查询插入临时表,并从那里进行过滤。

Select Category,x,y,z
INTO #temp
from 
(
---Sample Query
) as a

SELECT * FROM #temp WHERE category Like 'Spart%'

这会强制优化器在将WHERE应用到最终结果之前按照将数据拉到一起的逻辑顺序来处理它。您可能还想考虑索引临时表的类别字段。