【发布时间】:2011-06-12 18:52:29
【问题描述】:
我在 SQL Server 2005 中有一个大表,我必须通过非聚集键从中选择记录,并且我正在尽我所能优化这个过程。
该表有很多列,我在三个不同的列上添加了非聚集索引。
SELECT * FROM table WHERE Field1 = 10;
SELECT * FROM table WHERE Field2 = 40;
SELECT * FROM table WHERE Field3 = 'A';
Field1 和 Field2 是整数字段,Field3 是 varchar。
当我从 SQL Server 请求这三个查询的估计查询执行计划时,我得到的每个查询基本相同:
SELECT -> Nested Loop -> Index Seek
-> Key Lookup
但我发现执行时间非常不一致。具体来说,第二个查询占用了总查询成本的 98%。它的执行计划与其他执行计划相同,只是 Key Lookup 步骤与 Index Seek 相比成本为 100%。在其他两个查询中,它接近 50%。
我知道键查找是不可取的,可以通过向索引添加列来避免查找额外的列。但是,在这种情况下,我希望将表中的所有列都返回给我,因此将它们全部添加到索引中是没有意义的。但是一个索引怎么会导致一个 Key Lookup 操作比另一个 Key Lookup 花费更长的时间呢?
【问题讨论】:
标签: sql sql-server performance sql-server-2005 indexing