索引
1、对于创建的多列(复合)索引,只要查询条件使用了最左边的列,索引一般就会被使用。
该查询条件没有使用到最左边的列,所以没有使用到索引。
该条件中使用了复合索引的最左边的列,因此该查询会使用到索引。
2、对于使用like的查询,查询如果是”%XXX”,不会使用到索引,‘XXX%’会使用到索引。
注意:在有些情况下,还是会用到like查询,比如通过歌词搜索歌名,通过剧情搜索电影名称。借助于工具,sphinx里面的coreseek软件。
3、如果条件中有or,则要求or的索引字段都必须有索引,否则不能用到索引。
该email添加索引后,在测试,会用到索引
4、如果列类型是字符串,一定要在条件中将数据使用引号引用起来,否则不使用索引。
5、优化group by语句
默认情况下, mysql对所有的group by col1,col2进行排序。这与在查询中指定order by col1,col2类型,如果查询中包括group by 但用户想要避免排序结果的消耗,则可以使用order by null禁止排序。
6、当取出的数据量超过表中数据的20%,优化器就不会使用索引,而是全表扫描。扫描的行数太多了,优化器认为全表扫描比索引来的块。
7、查看索引的使用情况
注意:
handler_read_key:这个值越高越好,越高表示使用索引查询到的次数。
handler_read_rnd_next:这个值越高,说明查询低效。
8、对应大批量插入数据
对于MyISAM:
先禁用索引:
alter table table_name disable keys;
loading data//insert语句; 执行插入语句
执行完成插入语句后,开启索引,统一添加索引。
alter table table_name enable keys;
对于Innodb:
1,将要导入的数据按照主键排序
2,setunique_checks=0,关闭唯一性校验。
3,setautocommit=0,关闭自动提交。