[英]Avoid full table scan
我有一个需要调整的SQL选择查询。 在查询中,有一个View in from子句,该子句是通过4个表形成的。 执行此查询时,将对所有这4个表进行全表扫描,这会导致CPU峰值。 这四个表具有有效的索引。
该查询类似于以下内容:
SELECT DISTINCT ID, TITLE,......
FROM FINDSCHEDULEDTESTCASE
WHERE STEP_PASS_INDEX = 1 AND LOWER(COMPAREANAME) ='abc' ORDER BY ID;
点表示还有更多列。 这里FINDSCHEDULEDTESTCASE是四个表的视图。
有人可以指导我如何避免对这四个表进行全表扫描。
无论如何使用您的条件
AND LOWER(COMPAREANAME) ='abc'
您将对COMPAREANAME值进行全面扫描,因为必须为每个值函数计算LOWER。
这取决于很多事情!
SELECT DISTINCTG ID, TITLE, ......
根据您选择的列数,SQL Server可能决定执行表扫描而不使用索引。
另外,根据您的“ WHERE”条件,SQL Server还可以决定执行表扫描而不是使用索引。
您正在使用哪个版本的SQL Server?
可以有办法改善表上的索引,如果,例如,在“WHERE”代表行的不到50%,如果你使用的是SQL 2008(带过滤索引条件的http:// msdn.microsoft.com/zh-CN/library/ms188783.aspx )
或者,您可以在视图上创建索引( http://msdn.microsoft.com/zh-cn/library/ms191432.aspx )
您的问题中确实没有足够的细节能够真正为您提供帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.