Sql server 单列索引还是多列索引(-es)?

Sql server 单列索引还是多列索引(-es)?,sql-server,database,indexing,Sql Server,Database,Indexing,我有一个有3列的表:“Id”、“a”、“B”。 它们都是可搜索的。Id是标识,仅用于搜索精确的行,以使其清晰。但我对“A”和“B”有疑问。在我的申请中,我有3个案例需要搜索:按“a”搜索,按“B”搜索,同时按“a”和“B”搜索。所以我不确定该选择哪种索引类型。我应该使用两个单列索引还是一个多列索引?或者最好将单列索引与多列索引(总共3个索引)结合起来?我并不真正关心插入/更新/删除的持续时间,我的目标优先级是尽可能快地进行选择。 我使用SQL Server 2017。 谢谢。我认为增加两个索引就

我有一个有3列的表:“Id”、“a”、“B”。 它们都是可搜索的。Id是标识,仅用于搜索精确的行,以使其清晰。但我对“A”和“B”有疑问。在我的申请中,我有3个案例需要搜索:按“a”搜索,按“B”搜索,同时按“a”和“B”搜索。所以我不确定该选择哪种索引类型。我应该使用两个单列索引还是一个多列索引?或者最好将单列索引与多列索引(总共3个索引)结合起来?我并不真正关心插入/更新/删除的持续时间,我的目标优先级是尽可能快地进行选择。 我使用SQL Server 2017。
谢谢。

我认为增加两个索引就足够了:

CREATE INDEX IDX_YourTable_AB ON YourTable(A,B) -- the first column here which has more different values
CREATE INDEX IDX_YourTable_B ON YourTable(B)INCLUDE(A)
如果此表中有其他列,则可以创建包含的索引:

CREATE INDEX IDX_YourTable_AB ON YourTable(A,B) INCLUDE(C,D,E,...)
CREATE INDEX IDX_YourTable_B ON YourTable(B) INCLUDE(A,C,D,E,...)
索引
IDX\u YourTable\u AB
可用于条件
中的A=''.''.'
中的A=''.'和B='.''.'.''.'.
中的A='.''.''.'''.''.''.''.
中的A='.'.'.'.'.''.'.'.''.'.'.''.'.'.'.
仅使用
A

索引
IDX\u YourTable\u B
仅可用于
B
列的条件(
其中B='.''.'
其中B类似'.%'.'


另外,尝试在表(B,A)上测试
创建索引IDX\u YourTable\u BA
,而不是在表(B)上测试
创建索引IDX\u YourTable\u B包括(A)
。也许会更好。

我认为增加两个索引就足够了:

CREATE INDEX IDX_YourTable_AB ON YourTable(A,B) -- the first column here which has more different values
CREATE INDEX IDX_YourTable_B ON YourTable(B)INCLUDE(A)
如果此表中有其他列,则可以创建包含的索引:

CREATE INDEX IDX_YourTable_AB ON YourTable(A,B) INCLUDE(C,D,E,...)
CREATE INDEX IDX_YourTable_B ON YourTable(B) INCLUDE(A,C,D,E,...)
索引
IDX\u YourTable\u AB
可用于条件
中的A=''.''.'
中的A=''.'和B='.''.'.''.'.
中的A='.''.''.'''.''.''.''.
中的A='.'.'.'.'.''.'.'.''.'.'.''.'.'.'.
仅使用
A

索引
IDX\u YourTable\u B
仅可用于
B
列的条件(
其中B='.''.'
其中B类似'.%'.'

另外,尝试在表(B,A)上测试
创建索引IDX\u YourTable\u BA
,而不是在表(B)上测试
创建索引IDX\u YourTable\u B包括(A)
。也许会更好