查询:
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)
执行计划:
由于它导致索引扫描,我可以设法以某种方式获取索引搜索吗?我能否就此提出一些建议?
该表将拥有相当大的数据,大约有10万行。在所有查询中,这是一个性能非常糟糕的查询。我还能做些什么来提高性能吗?
答案 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