在SQL中提高Select语句性能的可能方法

时间:2015-02-19 20:34:16

标签: sql-server ssms

查询:

select * from dbo.ResultsStored order by SearchSerial desc, PercentMatch desc

索引:

CREATE clustered INDEX ClustIndex_Sno
ON ResultsStored (SearchSerial)

create nonclustered index nonclustInd_RowId_Percent
ON ResultsStored(RowId) Include (PercentMatch)

执行计划:

Execution Plan

由于它导致索引扫描,我可以设法以某种方式获取索引搜索吗?我能否就此提出一些建议?

该表将拥有相当大的数据,大约有10万行。在所有查询中,这是一个性能非常糟糕的查询。我还能做些什么来提高性能吗?

3 个答案:

答案 0 :(得分:1)

我认为你需要备份一些步骤并问自己,“我真的需要从这张桌子上退回每一行吗?”您使用了SELECT *,因此无法使用此方法获取索引。重新审视您的要求并确定您是否需要表中的每个属性和/或记录,或者您是否只想返回特定的数据子集。添加使用索引字段的WHERE子句可以极大地提高性能,因为索引和较小的数据集。如果不是这种情况,请考虑您使用订单的原因。如果您只需按顺序查看前1000行,则可以使用TOP大大减少数据集大小。提供更多关于查询这些数据的目的的信息,也许我们可以为您提供更好的机会,以获得您喜欢的解决方案。

答案 1 :(得分:1)

CREATE NONCLUSTERED INDEX IX_SearchSerial_PercentMatch 
    ON ResultsStored (SearchSerial desc, PercentMatch desc); 

答案 2 :(得分:-1)

我想重申一下,如果可能的话,你应该使用索引字段确实有一个非常具体的where子句。它还有助于仅选择您实际需要的字段并使用with(nolock)提示,如下所示:

选择*来自dbo.ResultsStored with(nolock) 按SearchSerial desc命令,PercentMatch desc