我有一个包含3列的表格:“ Id”,“ A”,“ B”。 它们都是可搜索的。 Id是身份,仅用于搜索确切的行,因此很清楚。但是我对“ A”和“ B”有疑问。我有3种情况要在我的应用程序中搜索:按“ A”搜索,按“ B”搜索以及同时按“ A”和“ B”搜索。所以我不确定要选择哪种索引类型。我应该使用两个单列索引还是一个多列索引?还是将单列索引与多列(总共3个索引)结合起来更好?我不太在意INSERT / UPDATE / DELETE的持续时间,我的目标优先级是使SELECT尽可能快。 我使用SQL Server 2017。 谢谢。
答案 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
列的条件(B
或WHERE B='...'
)。
也尝试测试WHERE B LIKE '...%'
而不是CREATE INDEX IDX_YourTable_BA ON YourTable(B,A)
。也许会更好。