1、创建索引,要考虑列的选择性高的列,以及where条件后面列字段的使用频率,通常使用where条件使用频率特别高的一两列作为多列索引的最左列字段。
(列的选择性:某列的所有不同值的总数量/该列所有行总数量
sql示例name列的选择性:select count(distinct(name))/count(0) from user
)
2、尽量使用包含较多列的多列索引,来避免创建多个有交叉重复的列比较少的多列索引。但是如果某多列索引的列很多,就会出现:查询中没用到多列索引中的某列,而这个列又恰在索引列的左边,这样就用不了这个索引,可以考虑用in的技巧去优化查询,比如索引的最左列为sex字段,但是我们的查询不用sex,我们可以写 in (’m’,’f’)来达到使用该列作为选择条件的目的,这样我们就能用这个多列索引了。
(查询不能使用在范围查询右边的索引列,而in严格意义上说也是范围查询,不过mysq查询优化器会把它进行各种等于情况的组合,所以不算范围查询。比如 sex in(’m’,’f’)会组合成 sex = ‘m’union sex = ‘f’ 的情况)
3、尽量把范围排序放在多列索引的最右边。另外查询时候考虑能否用in替换范围查询,这样就可以用到更多的索引列。
(范围查询,eg : < ,> ,between and)
待续。。。