文章内容出自《高性能Mysql第三版》
如果字段经常出现在查询条件中,但选择性又比较低(比如性别).我们创建的组合索引中却有包含了此字段。这是我们可以在where条件中使用and 字段 in() 来让mysql选择该索引,这样写并不会过滤掉任何行。但是会让查询选择该索引,但是得注意得是,in的列表不能太长
在where条件中避免使用多个in() ,因为没额外增加一个in条件,优化器需要做的组合就将已指数形式增加,最终可能会极大地降低查询性能;如 where color in('blue','red') and sex in('男','女') and age in(16,17,18,19) .... 那么就有224种可能
我们在创建组合索引时,尽量将可变的条件字段放到最后。 因为条件字段会影响后面的索引无法使用
避免使用多个范围条件
文件排序在小数据是非常快,但是在数据量大后性能会很差。对于那些选择性非常低的列,可以增加一次额特殊的索引来排序,例如下面SQL:
select name from profiles where sex='男' order by rating limit 10;
此时创建(sex,rating)索引可以提高速度