通过索引优化查询

索引

1、对于创建的多列(复合)索引,只要查询条件使用了最左边的列,索引一般就会被使用。

[sql]  view plain  copy
 
  1. mysql> alter table user add index (name,email);  
  2. Query OK, 5 rows affected (0.08 sec)  
  3. Records: 5 Duplicates: 0  Warnings: 0  
通过索引优化查询_第1张图片
该查询条件没有使用到最左边的列,所以没有使用到索引。

通过索引优化查询_第2张图片

该条件中使用了复合索引的最左边的列,因此该查询会使用到索引。

2、对于使用like的查询,查询如果是”%XXX”,不会使用到索引,‘XXX%’会使用到索引。

通过索引优化查询_第3张图片

 

 通过索引优化查询_第4张图片

注意:在有些情况下,还是会用到like查询,比如通过歌词搜索歌名,通过剧情搜索电影名称。借助于工具,sphinx里面的coreseek软件。

3、如果条件中有or,则要求or的索引字段都必须有索引,否则不能用到索引。

通过索引优化查询_第5张图片

该email添加索引后,在测试,会用到索引

通过索引优化查询_第6张图片

4、如果列类型是字符串,一定要在条件中将数据使用引号引用起来,否则不使用索引。

 通过索引优化查询_第7张图片

5、优化group by语句

默认情况下, mysql对所有的group by col1,col2进行排序。这与在查询中指定order by col1,col2类型,如果查询中包括group by 但用户想要避免排序结果的消耗,则可以使用order by null禁止排序。

 通过索引优化查询_第8张图片

 

通过索引优化查询_第9张图片

通过索引优化查询_第10张图片

6、当取出的数据量超过表中数据的20%,优化器就不会使用索引,而是全表扫描。扫描的行数太多了,优化器认为全表扫描比索引来的块。

通过索引优化查询_第11张图片

7、查看索引的使用情况

通过索引优化查询_第12张图片

注意:

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,关闭自动提交。

你可能感兴趣的:(Mysql)