Mysql join表连接Block Nested-Loop算法的优化意义在哪里?

博文: https://blog.csdn.net/wanbin6...

Block Nested-Loop算法
MySQL BNL算法原本只支持内连接,现在已支持外连接和半连接操作,包括嵌套外连接。

BNL算法原理:将外层循环的行/结果集存入join buffer,内存循环的每一行数据与整个buffer中的记录做比较,可以减少内层循环的扫描次数

举个简单的例子:外层循环结果集有1000行数据,使用NLJ算法需要扫描内层表1000次,但如果使用BNL算法,则先取出外层表结果集的100行存放到join buffer, 然后用内层表的每一行数据去和这100行结果集做比较,可以一次性与100行数据进行比较,这样内层表其实只需要循环1000/100=10次,减少了9/10。
————————————————

问题:join_buufer中10行数据,内存表和join_buffer做比较,因此比较次数10*内层表行数,显然比较次数并没有减少。

“可以一次性与100行数据进行比较,”是什么意思?

阅读 876
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题