SQL优化问题的简述
SQL优化的7个方面
- 创建索引
- 避免索引失效
- 锁粒度(行锁还是表锁)
- 分页查询优化
- 避免查询所有字段
- 分析SQL的执行计划
- show profile 分析SQL的执行性能
创建索引
- 禁止给表中的每一列都建立单独的索引
- 每个Innodb表必须有一个主键
- 要注意组合索引的字段顺序
- 优先考虑覆盖索引
- 避免使用外键约束
避免索引失效(失效场景)
- 以%开头的LIKE查询
- 在索引列上的操作,函数upper()等,or、!=、<>、not in等等
- 创建了组合索引,但是查询条件不满足“最左匹配”原则
- 查询条件中使用or,且or的前后条件中有一个列没有索引,则其中涉及的索引就都不会被使用
锁粒度(行锁 还是 表锁)
- MySQL 的存储引擎分为两大类: MyISAM 和 InnoDB
- MyISAM 支持只表锁
- InnoDB 支持行锁和表锁
- 更新操作时,为了保证表数据的准确性,通常会加锁,为了提高系统的高并发能力,我们通常建议采用行锁,减少锁冲突、锁等待的时间。所以,存储引擎通常会选择 InnoDB
分页查询优化
避免查询所有字段
分析SQL的执行计划
show profile 分析SQL的执行性能
后续会逐渐完善...此章节先打个点