MySQL索引两表与三表优化案例
两表优化:
建表SQL:
案例:
未建索引explain结果:
只有card字段关联可以先左右表任选一个card字段建立普通索引尝试,加在右表book上的结果优化明显:
加在左表class上的结果无太大优化:
对于右连接来说左表class一定要建索引,在右表book上建索引无太大影响
三表优化:
建表SQL:
案例:
结论:
join语句的优化:
- 在右表且经常查询的字段中加入索引能大大提高效率
- 尽可能减少join语句中的nestedLoop的循环总次数:“永远用小结果集驱动大的结果集”。
- 优先优化NestedLoop(嵌套循环)是内层循环
- 保证Join语句中被驱动表上Join条件字段已经被索引
- 当无法保证被驱动表的join条件字段被索引且内存资源充足的前提下,不要太吝惜joinbuffer的设置