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

时间:2019-04-21 19:30:21

标签: sql-server database indexing

我有一个包含3列的表格:“ Id”,“ A”,“ B”。 它们都是可搜索的。 Id是身份,仅用于搜索确切的行,因此很清楚。但是我对“ A”和“ B”有疑问。我有3种情况要在我的应用程序中搜索:按“ A”搜索,按“ B”搜索以及同时按“ A”和“ B”搜索。所以我不确定要选择哪种索引类型。我应该使用两个单列索引还是一个多列索引?还是将单列索引与多列(总共3个索引)结合起来更好?我不太在意INSERT / UPDATE / DELETE的持续时间,我的目标优先级是使SELECT尽可能快。 我使用SQL Server 2017。 谢谢。

1 个答案:

答案 0 :(得分:0)

我认为另外两个索引就足够了:

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_YourTable_AB可能用于条件WHERE A='...'WHERE A='...' AND B='...'WHERE A LIKE '...%' AND B='...'-仅用于A列或A&{{1} }列。

索引B仅可用于具有IDX_YourTable_B列的条件(BWHERE B='...')。

也尝试测试WHERE B LIKE '...%'而不是CREATE INDEX IDX_YourTable_BA ON YourTable(B,A)。也许会更好。

相关问题