繁体   English   中英

避免全表扫描

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM