注意:MySQL 5.1.18之后的版本中才会体现出来

一:原理:

在MySQL 中,只有一种 Join 算法,就是大名鼎鼎的 Nested Loop Join,他没有其他很多数据库所提供的 Hash Join,也没有 Sort Merge Join。
1.Nested Loop Join 实际上就是通过驱动表的结果集作为循环基础数据,然后一条一条的通过该结果集中的数据作为过滤条件到下一个表中查询数据,然后合并结果。
2.如果还有第三个参与 Join,则再通过前两个表的 Join 结果集作为循环基础数据,再一次通过循环查询条件到第三个表中查询数据,如此往复。

二:图解


MySQL Query Optimizer 选择了 user_group 作为驱动表,首先利用我们传入的条件 user_id 通过 该表上面的索引 user_group_uid_ind 来进行 const 条件的索引 ref 查找,
然后以 user_group 表中过滤出来的结果集的 group_id 字段作为查询条件,对 group_message 循环查询,
然后再通过 user_group 和 group_message 两个表的结果集中的 group_message 的 id 作为条件 与 group_message_content 的 group_msg_id 比较进行循环查询,
才得到最终的结果。没啥特别的,后一个引用前一个的结果集作为条件

三:去掉引擎

group_message_content 去掉上面的 idx_group_message_content_msg_id 这个索引,

group_message_content 表的访问从 ref 变成了 ALL,此外,在最后一行的 Extra信息从没有任何内容变成为 Using where; Using join buffer,也就是说,对于从 ref 变成 ALL 很容易理解,没有可以使用的索引的索引了嘛,当然得进行全表扫描了,Using where 也是因为变成全表扫描之后,我们需要取得的 content 字段只能通过对表中的数据进行 where 过滤才能取得

MySQL中Join算法实现原理通俗易懂相关推荐

  1. mysql join图解_MySQL中Join算法实现原理分析[多图]

    在MySQL 中,只有一种 Join 算法,就是大名鼎鼎的 Nested Loop Join,他没有其他很多数据库所提供的 Hash Join,也没有 Sort Merge Join.顾名思义,Nes ...

  2. 关于mysql中Join语句的几个问题

    本文来说下关于mysql中Join语句的几个问题,JOIN语句在平时的开发中还是使用的非常多的 文章目录 概述 基本介绍 举个例子 一个注意点 Join原理 Simple Nested-Loop In ...

  3. 腾讯一面:说一说 MySQL 中索引的底层原理

    一.前言 最近有很多读者要我出一些面试题的文章,一般我会给他一个老周整理的电子书,但有些读者反馈回来的面试题我觉得还是蛮经典的,而老周又在写系列的文章,本着对读者负责的态度,我会穿插写几篇我认为比较经 ...

  4. mysql join 索引 无效_ORACLE MYSQL中join 字段类型不同索引失效的情况-阿里云开发者社区...

    ORACLE MYSQL中join 字段类型不同索引失效的情况 重庆八怪 2016-12-29 780浏览量 简介: 关于JOIN使用不同类型的字段类型,数据库可能进行隐士转换,MYSQL ORACL ...

  5. mysql的join算法_mysql的Join算法-阿里云开发者社区

    实为吾之愚见,望诸君酌之!闻过则喜,与君共勉 测试数据 CREATE TABLE `dept_emp` ( `emp_no` int(11) NOT NULL, `dept_no` char(4) N ...

  6. mysql中decimal不能为空吗_程序员,知道Mysql中事务ACID的原理吗?

    点击上方"linkoffer", 选择关注公众号高薪职位第一时间送达 引言 照例,我们先来一个场景~ 面试官:"知道事务的四大特性么?" 你:"懂,A ...

  7. mysql中join各种形式大全及操作和图片

    一:创建2张表 *join 建表语句*/ drop database if exists test; create database test; use test;/* 左表t1*/ drop tab ...

  8. MySQL 中事务的实现原理全解析

    在关系型数据库中,事务的重要性不言而喻,只要对数据库稍有了解的人都知道事务具有 ACID 四个基本属性,而我们不知道的可能就是数据库是如何实现这四个属性的:在这篇文章中,我们将对事务的实现进行分析,尝 ...

  9. MySQL中JOIN的用法

    JOIN用于连表查询,主要有5种用法.下面分别演示这5种用法 随便建2张表,结构如下 字段col1用来使两张表有一个同名字段的(但其实没什么用,因为查询条件都需要用ON来指定,这里只是说明一下如果有相 ...

最新文章

  1. The application could not be installed: INSTALL_FAILED_NO_MATCHING_ABIS
  2. 02移动端布局基础之流式布局项目实战(京东移动端首页)
  3. python学习-之汉诺塔实现
  4. java 常量区存放 new_java常量池与对象存储
  5. 蓝桥杯 - 牌型种数(dfs)
  6. C++ 普通函数和模板函数调用规则
  7. java初反射_java中的反射机制
  8. iPhone 13系列又有新配色:猛男必看!
  9. 陈冠希宣布代言小野电子烟 罗永浩:实现了长久以来的心愿
  10. bzoj 1196: [HNOI2006]公路修建问题(贪心+最小生成树)
  11. 面试题之说几个Object类常用方法以及作用
  12. 将txt文件编码改为utf-8格式
  13. 计算机论文题目_基于java的毕业设计题目_50例
  14. 数据库----如何将oracle语句转换成mysql语句
  15. 帝国CMS二次开发对接第三方支付接口教程
  16. 2005-10-22 风波
  17. vue抽屉_vue 自定义抽屉组件 仿 iview
  18. c语言switch优点,关于C语言switch
  19. 电脑每隔约半分钟弹出this computer is being attacked
  20. 烟台有线电视频率与节目表

热门文章

  1. Cookie (设置与读取、超时设置、指定路径、显示用户上次登录时间)
  2. 要显示的8个字符已存放在以BUF开始的存储区单元中(称为显示缓冲区),依次送到LED显示器中显示。CPU通过P0口和P2口控制8位LED显示器,LED为共阴极显示器。
  3. Spring系列(一):Spring的基本概念及其核心
  4. Linux命令解释之rm
  5. 「管理数学基础」4.2 模糊数学:扩张原理、模糊数、可能性分布与模糊概率
  6. (四)揭开数据分析方案的神秘面纱——一案在手,成竹在胸
  7. jQuery幸运大转盘_jQuery+PHP抽奖程序
  8. 设计模式系列之九:职责链模式
  9. java鼠标右击出现选择窗口_java菜单代码 java中鼠标右击弹出菜单怎样实现
  10. 怎么看tomcat连接的哪个mysql_如何验证tomcat和mysql连接成功呢