索引使用经验

本文探讨了数据库查询优化的各种技巧,包括单表查询时的复合索引创建、最佳左前缀法则以及避免索引失效的操作。在多表关联查询中,强调了驱动表的选择和子查询的优化。此外,还讲解了子查询的使用和避免全表扫描的orderby与groupby策略。了解这些原则能显著提升数据库性能。
摘要由CSDN通过智能技术生成

单表

  1. 全值匹配我最爱,where后面有几列建复合索引。
  2. 最佳左前缀法则,如果索引了多列,要遵守最左前缀法则,指的是查询从索引的最左前列开始并且不跳过索引中间的列。
  3. 不在索引列上做任何操作(计算、函数、(自动或手动)类型转换),会导致索引失效。where abs(a) = 12;
  4. 存储引擎不能使用索引中范围条件右边的列,范围查询列放最后建索引。
  5. mysql 在使用不等于(!=或者<>)的时候无法使用索引会导致全表扫描。
  6. is not null 也无法使用索引,但是is null 是可以使用索引的。
  7. like 已通配符开头(%abc)索引会失效,全表扫描。
  8. 字符串不加单引号索引失效。
    索引->平衡二叉树
    在这里插入图片描述

多表关联

  1. 保证被驱动表的join字段已经被索引。
  2. left join时,选择小表作为驱动表,大表作为被驱动表。
  3. inner join 时,mysql 会自己帮你把小结果集的表作为驱动表。(在不影响结果的情况下优化器调整,order by 多列就不会调整),如果优化后还是大表是驱动表,可以使用STRAIGHT_JOIN指明驱动表。
  4. 子查询尽量不要放在被驱动表,有可能使用不到索引。
  5. 能够直接多表关联的尽量直接关联,不用子查询,子查询会新增一趟独立查询。
    在这里插入图片描述

子查询优化

尽量不要使用not in 或者not exists,用left join on xxx is null 替代。一个表里有,一个关联查询,尽量关联查询。
在这里插入图片描述

order by&group by

  1. 无过滤,不索引。没有过滤条件(where age = 10; limit 10等)索引用不上。
  2. 顺序错,必排序。order by 后面顺序不符合建的复合索引的顺序,Using filesort:。
  3. 方向反,必排序。order by 后面要么都升序,要么都降序。一升一降Using filesort:。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值