我正在运行一个查询,它是在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子句时,执行的时间会更长?
发布于 2018-01-02 21:52:30
如果您通过检查management studio的实际执行计划来使用MS SQL,则可能已经建议创建索引
在任何情况下,您都应该将"Category“列添加到查询所使用的索引中
如果表上没有索引,请创建由列"Category“和join或where中使用所有其他列组成的索引
请记住,使用like 'text%‘子句可能会以索引扫描而不是索引查找结束
发布于 2018-01-02 21:52:30
如果看不到完整的查询,就不可能确切地说出问题是什么。优化器很可能正在以一种性能不佳的方式将WHERE推送到“示例查询”中。可能可以通过更新表上的统计信息来解决,但更容易的选择是将整个查询插入到一个临时表中,并从那里进行过滤。
Select Category,x,y,z
INTO #temp
from
(
---Sample Query
) as a
SELECT * FROM #temp WHERE category Like 'Spart%'这将迫使优化器在将WHERE应用于最终结果之前,按照将数据放在一起的逻辑顺序来处理它。您可能还想考虑为临时表的类别字段建立索引。
https://stackoverflow.com/questions/48061700
复制相似问题