sql优化的几个关键点,尽量使用索引,避免各种锁,减少数据扫描数量
1).mysql嵌套子查询效率确实比较低,可以将其优化成连接查询
2).连接表时,可以先用where条件对表进行过滤,然后做表连接 (虽然mysql会对连表语句做优化)
3).建立合适的索引,必要时建立多列联合索引
4).学会分析sql执行计划,mysql会对sql进行优化,所以分析执行计划很重要
索引
建立索引的几大情况
- 多表连接的字段上建立索引
- where条件字段上建立索引
- 排序字段上建立索引
- 分组字段上建立索引
索引进一步优化的时候可以考虑的方向:
(1)很多时候,用执行计划分析,单个索引都是
type=index_merge(这是mysql对多个单列索引的优化,对结果集采用intersect并集操作)
这种情况下,如果有业务需求,可以考虑建立多列索引,让他的type提升到ref(因为是最左前缀,在建立联合索引时可以考虑把最大区分度的字段放在最左边,如果区分度差不多,挑选字段较短的字段放在索引的最左端)
(2)在连接查询时,被连接的新子表尽可能使用覆盖索引
这里需要了解一下回表和索引下推
MySQL在辅助索引上找到对应的主键值并通过主键值在聚簇索引上查找所要的数据就叫回表
索引下推
mysql5.6以后,mysql增加了索引下推,避免了多余的回表操作(实现原理:InnoDB并没有忽略这个字段ÿ