MySQL索引两表与三表优化案例

两表优化:

建表SQL:
在这里插入图片描述
在这里插入图片描述
案例:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200205171138820.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shad
未建索引explain结果:
在这里插入图片描述
只有card字段关联可以先左右表任选一个card字段建立普通索引尝试,加在右表book上的结果优化明显:
在这里插入图片描述
在这里插入图片描述
加在左表class上的结果无太大优化:
在这里插入图片描述
对于右连接来说左表class一定要建索引,在右表book上建索引无太大影响
在这里插入图片描述

三表优化:

建表SQL:
在这里插入图片描述
案例:
在这里插入图片描述
在这里插入图片描述

结论:

join语句的优化:

  1. 在右表且经常查询的字段中加入索引能大大提高效率
  2. 尽可能减少join语句中的nestedLoop的循环总次数:“永远用小结果集驱动大的结果集”。
  3. 优先优化NestedLoop(嵌套循环)是内层循环
  4. 保证Join语句中被驱动表上Join条件字段已经被索引
  5. 当无法保证被驱动表的join条件字段被索引且内存资源充足的前提下,不要太吝惜joinbuffer的设置
发布了217 篇原创文章 · 获赞 125 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_39885372/article/details/104185219