位置: 编程技术 - 正文

MySQL中Nested-Loop Join算法小结

编辑:rootadmin

推荐整理分享MySQL中Nested-Loop Join算法小结,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

不知不觉的玩了两年多的MySQL,发现很多人都说MySQL对比Oracle来说,优化器做的比较差,其实某种程度上来说确实是这样,但是毕竟MySQL才到5.7版本,Oracle都已经发展到c了,今天我就看了看MySQL的连接算法,嗯,现在来说还是不支持Hash Join,只有Nested-Loop Join,那今天就总结一下我学习的心得吧。

Nested-Loop Join基本算法实现,伪代码是这样:

这段代码很简单,虽然我也不怎么会写代码,但是我还是看得懂的。这里假设有三张表,t1, t2, t3,这段代码,分别会展现出explain计划里的range, ref和ALL,表现在SQL执行计划层里,t3就会进行一次全表扫描,我今天在这个地方看到了一个很妖的优化SQL方法,Straight-join: 当然了,MySQL自己在这个算法基础上,演进出了Block Nested-Loop join算法,其实基本上和上面的算法没有区别,伪代码如下:

这个算法,将外层循环的数据缓存在join buffer中,内层循环中的表回合buffer中的数据进行对比,从而减少循环次数,这样便可以提高效率。官网上有个example,我有点没有看明白:如果有行被缓存到了buffer里,这行被传给了内层循环,内层循环的所有行都会和buffer中的这行进行对比。原文是这样的:

MySQL中Nested-Loop Join算法小结

For example, if rows are read into a buffer and the buffer is passed to the next inner loop, each row read in the inner loop can be compared against all rows in the buffer 如果S指的是t1, t2组合在缓存中的大小,C是这些组合在buffer中的数量,那么t3表被扫描的次数应该是:

(S * C)/join_buffer_size + 1

根据这个算式,join_buffer_size越大,扫描的次数越小,如果join_buffer_size到了能缓存所有之前的行组合,那么这时就是性能最好的时候,之后再增大也就没有什么效果了。

在有索引的情况下,MySQL会尝试去使用Index Nested-Loop Join算法,在有些情况下,可能Join的列就是没有索引,那么这时MySQL的选择绝对不会是最先介绍的Simple Nested-Loop Join算法,因为那个算法太粗暴,不忍直视。数据量大些的复杂SQL估计几年都可能跑不出结果,如果你不信,那就是too young too simple。或者Inside君可以给你些SQL跑跑看。

Simple Nested-Loop Join算法的缺点在于其对于内表的扫描次数太多,从而导致扫描的记录太过庞大。Block Nested-Loop Join算法较Simple Nested-Loop Join的改进就在于可以减少内表的扫描次数,甚至可以和Hash Join算法一样,仅需扫描内表一次。

Windows7下如何在命令行使用MySQL 我在Win7下安装的MySQL版本是mysql-5.0.-win、在Win7环境下安装MySQL,关于安装方法可以参考文章:Win7系统安装MySQL5.5.图解教程、win7安装MySql2、将MySQL的

简单谈谈MySQL的loose index scan 众所周知,InnoDB采用IOT(indexorganizationtable)即所谓的索引组织表,而叶子节点也就存放了所有的数据,这就意味着,数据总是按照某种顺序存储的。所

Mysql全局ID生成方法 生产系统随着业务增长总会经历一个业务量由小变大的过程,可扩展性是考量数据库系统高可用性的一个重要指标;在单表/数据库数据量过大,更新量不

标签: MySQL中Nested-Loop Join算法小结

本文链接地址:https://www.jiuchutong.com/biancheng/312422.html 转载请保留说明!

上一篇:MySQL常见的底层优化操作教程及相关建议(mysql底层是什么)

下一篇:Windows7下如何在命令行使用MySQL(windows7怎么操作)

  • 所得税汇算清缴表在哪里打印
  • 纳税会计的要素有
  • 员工外出办事报备制度
  • 购货发票属于什么证据?
  • 服务业的费用都有哪些
  • 房地产企业施工电费会计分录
  • 发生哪些情形的应判定为重大电力安全隐患
  • 核算科目拨出专票怎么弄
  • 航空运单可以作为提货凭证吗
  • 行政单位现金日记账填写样本
  • 制造费用属于哪一类科目
  • 跨年发票作废时间有限制吗
  • 被合并企业评估什么意思
  • 业务招待费的进项可以抵扣吗
  • 租赁业务增值税纳税义务发生时间
  • 印花税计提会计分录
  • 活动策划税费
  • 企业职工福利费扣除标准
  • 劳务派遣公司会扣工资吗
  • 发票代码和发票号码在一起怎么办
  • 个体户生产经营所得怎么报税
  • 汇算清缴退税调整利润表
  • 工资本月计提下月发放,个税如何计算做账
  • 企业发放贷款怎么做分录
  • 土地租赁摊销年限按合同年限
  • 在windows7的
  • 收到的投资属于什么科目
  • php 反射
  • php数组函数实现机选双色球
  • mac 移动硬盘 文件系统
  • 拍卖土地印花税
  • 敬老院利润分析
  • 商贸企业税收优惠政策
  • 计提的发展基金如何使用
  • 中小企业成本核算方法
  • 注册公司时认缴和实缴时间怎么填
  • 前端控制台
  • 税负太高会预警吗
  • 为什么电子章打印出是黑色的
  • 资本化过程
  • 6款好用的ppt制作软件推荐
  • 火车票抵税申报表怎么填
  • 季节性用工法律规定
  • 以下哪些企业需要填报
  • 企业收到财政补贴如何开票
  • 金融资产发生的相关费用计入初始入账金额有那些
  • 家具入账固定资产怎么算
  • 往来账户余额
  • 比较详细的耐克知识大全
  • 材料暂估入库时需要考虑增值税进项税吗
  • 去税务局流程
  • 短期借款财务处理
  • 残保金是应交税费吗
  • 企业没有工会的需要计提嘛
  • 收到的出口退税款需要并入利润总额吗
  • 未摊销的费用怎样处理
  • 不同利益主体之间的利益如何协调
  • 如何学会计做账视频
  • MySQL 4.1/5.0/5.1/5.5/5.6各版本的主要区别整理
  • win10预览版21390
  • fedora系统怎么设置停电关机
  • 如何删除windows.old
  • windows server 2003与2008的区别联系与选择指南
  • 使用http_load来给Linux系统的服务器做压力测试
  • 为快捷方式建立快捷方式
  • shstart.exe - shstart是什么进程 有什么用
  • win7桌面右下角
  • linux系统怎么弄
  • perl-v
  • 用javascript
  • windows安装python pip
  • jquery 鼠标
  • 一张监控
  • js数组菜鸟教程
  • js eval
  • 税务局领取发票后怎么操作
  • 湖北省税务局官网电话
  • 国有企业租赁经营 河北省
  • 长春税务局电话举报
  • 企业对税务局建议
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设