我正在查看在过去几年中(在许多不同的开发人员的领导下)取得重大发展的数据库上的一些运行缓慢的查询。
最常用的表之一有几个索引,它们具有相同的索引列,但其中一个包含列,另一个不包含。
例如:
一个索引:
CREATE NONCLUSTERED INDEX [IDX_tblTable_IndexedColumnId_Inc] ON [dbo].[tblTable]
(
[IndexedColumnId] ASC
)
Run Code Online (Sandbox Code Playgroud)
然后另一个:
CREATE NONCLUSTERED INDEX [IDX_tblTable_IndexedColumnId_Inc] ON [dbo].[tblTable]
(
[IndexedColumnId] ASC
)
INCLUDE ( [Field1Id],
[Field2],
[Field3],
[Field4],
[Field5],
[Field6])
Run Code Online (Sandbox Code Playgroud)
我认为这只是一个疏忽,只是使用磁盘空间和额外的开销来获得没有包含列的索引(已知需要包含列)。
在同一列上有两个索引有什么好处,一个包含列,另一个没有?