这个问题可能与以前发布的问题非常相似,但略有不同。 当您的查询始终包含两列时,我知道为两个列创建索引是一个好习惯,但对于此方案,查询将类似于检查列,然后查找大于第二列中给定值的所有记录,例如
SELECT * FROM Data WHERE User_Id = 'Johndoe' AND Last_Query > 1001
那么我仍然应该为两个列(上例中的User_id
,Last_Query
)使用单个索引,还是应该为每个列创建不同的索引?
答案 0 :(得分:3)
多列索引旨在处理这种情况。当索引中的第一列具有已知值(在您的示例中为User_Id ='Johndoe')时,具有该值的所有行都按索引中的第二列排序(在您的示例中为Last_Query)。这样可以有效地寻找第二列范围开始的位置。
通常,当索引列的任何前缀在其上具有“=”过滤器,后跟下一个索引列上的范围过滤器(>或<)时,此方法有效。即,(col1,...,colN + 1)上的索引和WHERE过滤器,例如:
WHERE col1=a AND col2=b ... AND colN=c AND colN+1 > d