我刚刚在SQL Server 2005中的表中添加一个索引,它让我思考。创建1个索引和定义多个列,每个列中有1个索引需要索引的区别是什么?
是否有某些理由为什么应该使用另一个?
例如
Create NonClustered Index IX_IndexName On TableName
(Column1 Asc, Column2 Asc, Column3 Asc)
与
Create NonClustered Index IX_IndexName1 On TableName
(Column1 Asc)
Create NonClustered Index IX_IndexName2 On TableName
(Column2 Asc)
Create NonClustered Index IX_IndexName3 On TableName
(Column3 Asc)
多列索引可用于引用所有列的查询:
SELECT *
FROM TableName
WHERE Column1=1 AND Column2=2 AND Column3=3
这可以直接使用多列索引来查找。另一方面,至多可以使用单列索引中的一个(它将不得不查找所有具有Column1 = 1的记录,然后检查每个列中的Column2和Column3)。
如果一个索引是“覆盖”的,那么就不需要使用索引以外的任何东西。在SQL Server 2005中,还可以向索引添加不属于该键的其他列,这可以消除行的其余行。
具有多个索引,每个列上的每个索引可能意味着只有一个索引被使用 - 您将不得不参考执行计划来查看不同索引方案提供的效果。
你还可以使用调整向导来帮助确定哪些索引可以使给定的查询或工作负载执行最佳。