在设计索引时,若遇到有对各种组合进行筛选的情况,可以根据情况考虑建立各类组合索引或者建立一个索引,甚至不建立索引.
若在某表中有sex, country, age
三个字段,但在查询时有sex
,'sex,country', 'sex, country,age', 'sex, age', 'country'..等组合方式,这个时候有如下解决办法:
- 建立各类组合索引
这个是最直接的办法,但是在上面的情况中并不适用,因为要建立的索引太多,建立过多的索引会带来更大的维护开销.
- 建立各类组合索引
- 建立一个组合索引
这种方式是只有在特定情况下才能使用,即要筛选的列的取值数量是一定的,是能枚举出来的,例如性别只有男
,女
.在这样的情况下,可以建立key(sex, country, age)
索引,查询时,若要查询country,age
组合,则可以使用如下语句:
xxx where sex in ('男','女') and country='xxx' and age between 10 and 20;
但这里的枚举的数量不宜过多,因为查询复杂度会随着枚举列的数量呈指数增长.还有一个就是在设计索引时最好将经常用到范围搜索的字段放在索引的最后,例如age
字段.因为使用了范围查询后该字段后的索引列都不用再使用到.
- 建立一个组合索引
- 不要索引
在特殊情况下,若索引列过大,难以设计出合理的索引时,不使用索引也是可以的(好像是废话)
- 不要索引
网友评论