以下两个指标有什么区别吗?
- IDX_IndexTables_1
- IDX_IndexTables_2
如果有的话,有什么区别?
create table IndexTables (
id int identity(1, 1) primary key,
val1 nvarchar(100),
val2 nvarchar(100),
)
create index IDX_IndexTables_1 on IndexTables (val1, val2)
GO
create index IDX_IndexTables_2 on IndexTables (val2, val1)
GO
最佳答案
是的。是有区别的。
复合索引 IDX_IndexTables_1
可用于在 where 子句中使用 val1
列的任何查询。
复合索引 IDX_IndexTables_2
可用于在 where 子句中使用 val2
列的任何查询。
因此,例如 IDX_IndexTables_2
不能用于此查询(但可以使用 IDX_IndexTables_1):
SELECT val1, val2 FROM IndexTables
WHERE val1 = some_value
但可用于此查询:
SELECT val1, val2 FROM IndexTables
WHERE val2 = some_value AND val1 = some_other-value
考虑综合索引的方法就像考虑纸质电话簿;它按姓氏列进行索引,然后按名字列进行索引:您可以按姓氏进行查找,但不能按名字单独进行查找。
关于sql - 列以相反顺序定义的 2 个索引之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1549847/