dan*_*die 11 sql t-sql sql-server indexing composite-index
以下两个索引之间是否有任何差异?
如果有,有什么区别?
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
Run Code Online (Sandbox Code Playgroud)
Mit*_*eat 16
是.它们是有区别的.
复合索引IDX_IndexTables_1可val1用于在where子句中使用该列的任何查询.
复合索引IDX_IndexTables_2可val2用于在where子句中使用该列的任何查询.
因此,例如IDX_IndexTables_2不能用于此查询(但可以使用IDX_IndexTables_1):
SELECT val1, val2 FROM IndexTables
WHERE val1 = some_value
Run Code Online (Sandbox Code Playgroud)
但可以用于此查询:
SELECT val1, val2 FROM IndexTables
WHERE val2 = some_value AND val1 = some_other-value
Run Code Online (Sandbox Code Playgroud)
考虑综合指数的方法是考虑纸质电话簿; 它由surname列索引,然后是firstname列:您可以按姓氏查找,但不能单独查看名字.