0

我有一个要调整的 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 是四个表的视图。

有人可以指导我如何避免对这四个表进行全表扫描。

4

2 回答 2

2

在任何情况下使用你的条件

AND LOWER(COMPAREANAME) ='abc'

您将对 COMPAREANAME 值进行全面扫描,因为必须计算每个值函数 LOWER。

于 2012-07-04T20:32:27.327 回答
1

这取决于很多事情!

SELECT DISTINCTG ID, TITLE, ......

根据您选择的列数,SQL Server 可能决定执行表扫描而不是使用您的索引。

此外,根据您的“WHERE”条件,SQL Server 还可以决定执行表扫描而不是使用您的索引。

您使用的是哪个版本的 SQL Server?

有一些方法可以改进表上的索引,例如,如果“WHERE”中的条件代表少于 50% 的行,并且您使用的是 SQL 2008。(使用过滤索引http:// msdn.microsoft.com/en-us/library/ms188783.aspx

或者您可以在视图上创建索引 ( http://msdn.microsoft.com/en-us/library/ms191432.aspx )

您的问题中确实没有足够的细节来真正帮助您。

于 2012-07-04T17:38:59.957 回答