您的位置:首页 > 数据库 > MySQL

mysql高级索引分析,索引失效

2019-03-07 01:38 239 查看

一,索引分析
1,单表
2,两表
3,三表
join优化
尽可能减少join语句中的nestedLoop(嵌套循环链接)的循环次数:永远用小结果集驱动大结果集
优先优化NestedLoop(嵌套循环链接)的内层循环;
保证join语句中被驱动表上join条件字段已经被索引;
当无法保证驱动表join条件字段被索引且内存资源充足的前提下,不要太令色join buffer的设置

二,索引失效
1,全匹配最好
2,最佳左前缀法则:查询是不跳过多值索引的中间值;
3,不在索引上做任何操作(计算,函数,自动or手动类型转换),会导致索引失效全表扫描;
4,存储引擎不能使用索引中范围条件,右边的列
5,尽量使用覆盖索引(只访问索引的查询(索引的列和查询的列一致)),减少select *;
6,mysql在使用不等于(!=或<>)时无法使用索引,导致全表扫描,但是like后面不失效;
7,is null,is not null也无法使用索引;
8,like以通配符开头(%abc)mysql索引会失效变成全表扫描;
解决办法覆盖索引,select后面字段建立索引,不要使用

*

9,字符串不加单引号索引失效;
10,少用or用它来连接时索引失效;

注意:
order by的顺序必须和索引一致不然也会using filesort;
但是order by前,查询条件等于一个定制,再使用order by 排序,不会出现using filesort;

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: