mysql 连接查询的问题

benluobo 2013-11-19 11:13:09
例如下面的查询语句

select * from A inner join B using(id) inner join C using(name)

假如A表数据为10000 B表数据为20000 C表的数据为30000, 假设B表和C表的连接后只有1的记录数

按照mysql的执行计划, 会执行10000*20000*30000次循环(高性能MySql书籍上是这么表述的)

执行计划是 while(A.next){ while(B.next) { while(C.next)

但是这种情况,如果执行计划如下:

first declare tmpTable = while(B.next) { while(C.next)

second while(A.next){ tmp.id = A.id

下面的查询计划的循环次数就是 20000*30000 + 10000*n (n代表B和C连接的记录数)

按道理说第二种的计划应该好于第一种,mysql为什么不采用?
...全文
92 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
ACMAIN_CHM 2013-11-19
  • 打赏
  • 举报
回复
楼上正解,注意索引。
rucypli 2013-11-19
  • 打赏
  • 举报
回复
按照mysql的执行计划, 会执行10000*20000*30000次循环(高性能MySql书籍上是这么表述的) 如果a和b的id是有序的 则只需要各扫描一遍即可 不用10000*20000

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧