以下两个索引之间有什么区别吗?
如果有,有什么区别?
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可val1用于在where子句中使用该列的任何查询。
IDX_IndexTables_1
val1
复合索引IDX_IndexTables_2可val2用于在where子句中使用该列的任何查询。
IDX_IndexTables_2
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
考虑综合索引的方法是考虑纸质电话号码簿。它由“姓氏”列和“名字”列索引:您可以按姓氏查找,但不能按名字单独查找。