2
当现有索引包括新索引中的所有列时,为什么创建此新索引会大大提高性能?
我有Log和LogItem表;我正在编写查询以从这两者中获取一些数据。有成千上万个Logs,每个Log最多可以有125个LogItems 有问题的查询很复杂,因此我跳过了它(如果有人认为它很重要,可以将其发布),但是当我运行SSMS估计查询计划时,它告诉我一个新的非聚集索引可以将性能提高多达100% 。 Existing Index: Non-clustered Key Colums (LogItem): ParentLogID, DateModified, Name, DatabaseModified Query Plan Recommendation CREATE NONCLUSTERED INDEX [LogReportIndex] ON [dbo].[LogItem] ([ParentLogID],[DatabaseModified]) 只是为了好玩,我创建了这个新索引并运行了查询,令我惊讶的是,现在查询运行大约需要1秒钟的时间,而这才是10秒钟以上。 我以为现有索引可以覆盖这个新查询,所以我的问题是,为什么在新查询中仅使用的列上创建新索引会提高性能?我应该为where子句中使用的每种唯一组合的列都有索引吗? 注意:我不认为这是因为SQL Server正在缓存我的结果,在创建索引之前,我运行查询约25-30次,并且始终花了10-15秒,而在索引之后,索引一直都在〜1或更少。
19
sql-server
index