位置: 编程技术 - 正文

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怎么操作)

  • 进项税额转出的情况
  • 购买地瓜
  • 研发费用加计扣除是什么意思啊
  • 财务报表申报错误怎么办
  • 小规模印花税可以零申报吗
  • 季度现金流量表是三个月相加吗
  • 公允价值变动损益属于当期损益吗
  • 母公司向子公司出售不动产要征收增值税吗
  • 平价转让股权个税申报表填写
  • 单位租用个人住房合法吗
  • 进货发票未到怎么做账
  • 甲供材的范围
  • 资源税是否需要计提?
  • 一般纳税人注销需要多少钱
  • 什么情况下个税税率是10%
  • 增值税进项转出后企业所得税调整是含税价还是不含税价
  • 保险企业准备金是什么
  • 备抵法计提坏账准备的公式
  • 收到购买商品发票怎么做账
  • bios升级失败后如何恢复
  • macOS Catalina10.15.2值得升级吗 macOS Catalina10.15.2更新了什么
  • 简易征收做账
  • windows 11任务栏没有网络图标
  • 其他应付款不用付了怎么做分录
  • PHP:pcntl_fork()的用法_PCNTL函数
  • 车间耗材管理办法
  • 应付未付工资企业所得税
  • php处理数据
  • 损益类科目借贷方向是什么
  • 冲销进项税
  • Yii CFileCache 获取不到值的原因分析
  • uniapp开发常用案例
  • php header refresh
  • 母公司将子公司的资产负债和当期损益
  • 多线程的弊端
  • webpack devserver contentbase
  • vue有哪些内容
  • 语义特征的语法学概念
  • 研发支出什么时候转管理费用
  • 民营医院发票样式
  • c语言中如何防止函数重名
  • 帝国cms首页调用其他网站数据
  • 绿化租赁合同要交印花税吗
  • 年金终值系数是指已知( ),求终值
  • 购买的固定资产退回账务处理
  • 合营企业和联营企业的概念
  • 债券承销费是指什么费用
  • sql server 2005数据库备份
  • mysql数据类型char
  • 小规模纳税人免税怎么做账
  • 小企业固定资产入账标准
  • 提供维修业务的税率是多少
  • 预提费用在汇算清缴时调整,会计分录怎么做
  • 固定资产到期出售 合同
  • 增值税专用发票金额与付款金额是否必须一致
  • 人力资源公司劳务费发票税率
  • 本月增加的固定资产本月可以进行部门转移
  • 未分配利润转增股本法人股东要交税吗
  • mysql5.5中文乱码解决
  • mysql数据库视频
  • mysql绿色版配置
  • mysql的慢查询日志怎么查看
  • win8已共享但别电脑无权限
  • fedora7
  • freebsd使用wifi
  • 电脑怎么安装安卓模拟器
  • 新买的苹果电脑没有电
  • Win10 Mobile build 14393.189安装与上手体验视频
  • linux系统文件压缩命令
  • explorer.exe是什么指令
  • 苹果发布会亮点速览
  • 怎么用windows
  • cocos2dx 3.1 cpp版本转lua版本 mac
  • unity软件设计
  • 怎样用在js中使用css的内容
  • 详解Javascript ES6中的箭头函数(Arrow Functions)
  • asm指令
  • jQuery.Uploadify插件实现带进度条的批量上传功能
  • js如何判断输入输出
  • 非道路机械环保标志图片
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设