我正在运行一个查询,它根据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
子句时执行会花费更多时间?
答案 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应用到最终结果之前按照将数据拉到一起的逻辑顺序来处理它。您可能还想考虑索引临时表的类别字段。