SQL join查询为什么要小表驱动大表?

分析

mysql的join实现原理是,以驱动表的数据为基础,“嵌套循环”去被驱动表匹配记录,

select * from a join b on a.bid =b.id

假设 a表10000数据,b表20数据

这里有2个过程,b 表数据最少,查询引擎优化选择b为驱动表,

  • 循环b表的20条数据,
  • 去a表的10000数据去匹配,这个匹配的过程是B+树的查找过程,比循环取数要快的多。
  1. 小表驱动的方式
for  20条数据
   匹配10000数据(根据on a.bid=b.id的连接条件,进行B+树查找)

查找次数 20+ log10000

 

如果使用大表驱动,则查找过程是这样的

for 10000条数据
    匹配20条数据(根据on a.bid=b.id的连接条件,进行B+树查找)

查找次数 10000+ log20

 

结论

可以看出来
小表驱动大表:20+ log10000
大表驱动小表:10000+ log20
显然小表驱动大表查询效率要高很多。

posted @ 2021-01-04 01:01  苏天后  阅读(1909)  评论(0编辑  收藏  举报