有没有比为每个排列创建索引更好的方法来索引多列?

Dan*_*Lew 11 mysql database indexing

假设我有一个包含a,b和c列的数据库表.我计划对所有三列进行查询,但我不确定哪些列特别是我要查询.表中有足够的行,索引极大地加快了搜索速度,但是制作可能索引的所有排列(如下所示)感觉不对:

a
b
c
a, b
a, c
b, c
a, b, c
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来处理这个问题?(我很可能只是单独索引a,b,c,因为这会快速减少行数,但我想知道是否有更好的方法.)

如果您需要更具体的示例,在实际数据中,列是城市,州和邮政编码.另外,我正在使用MySQL数据库.

Tod*_*pog 19

在MS SQL中,索引"a,b,c"将覆盖场景"a"; "a,b"; 和"a,b,c".所以你只需要以下索引:

a, b, c
b, c
c
Run Code Online (Sandbox Code Playgroud)

不确定MySQL是否以相同的方式工作,但我会这么认为.

  • 这是正确的答案.MySQL的工作方式相同,这种技术称为"最左前缀".从http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html上的MySQL手册:"如果表有多列索引,则索引的任何最左前缀都可以由查找行的优化器.例如,如果你有一个三列索引(col1,col2,col3),你已经在(col1),(col1,col2)和(col1,col2,col3)上建立了索引搜索功能. ." (7认同)