小编典典

2个索引与以相反顺序定义的列之间的差异

sql

以下两个索引之间有什么区别吗?

  • 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

阅读 238

收藏
2021-03-17

共1个答案

小编典典

是的。它们是有区别的。

复合索引IDX_IndexTables_1val1用于在where子句中使用该列的任何查询。

复合索引IDX_IndexTables_2val2用于在where子句中使用该列的任何查询。

因此,例如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

考虑综合索引的方法是考虑纸质电话号码簿。它由“姓氏”列和“名字”列索引:您可以按姓氏查找,但不能按名字单独查找。

2021-03-17