对于下面这个三个表的join语句

select *
from t1
join t2 on(t1.a=t2.a)
join t3 on (t2.b=t3.b)
where t1.c>=X and t2.c>=Y and t3.c>=Z;

若改写成straight_join,要怎么指定连接顺序,以及怎么给三个表创建索引?

  1. 尽量使用BKA算法
    使用BKA,并非“先计算两个表join的结果,再跟第三个表join”,而是直接嵌套查询的。具体实现:在t1.c>=X、t2.c>=Y、t3.c>=Z这三个条件里,选择一个经过过滤以后,数据最少的那个表,作为第一个驱动表。此时,可能会出现如下两种情况。

如果选出来是表t1或者t3,那剩下的部分就固定了:

  • 如果驱动表是t1,则连接顺序是t1->t2->t3,要在被驱动表字段创建上索引,也就是t2.a 和 t3.b上创建索引
  • 如果驱动表是t3,则连接顺序是t3->t2->t1,需要在t2.b 和 t1.a上创建索引。

同时,我们还需要在第一个驱动表的字段c上创建索引。

第二种情况是,若选出来的第一个驱动表是表t2,则需要评估另外两个条件的过滤效果。

思路就是,尽量让每一次参与join的驱动表的数据集,越小越好,因为这样我们的驱动表就会越小。

如何在MySQL高效的join3个表相关推荐

  1. mysql高效获取两张表共同字段的交集数据

    问题: 例如下面两站表A,B.A表和B表分别有5-10w数据. A表结构如下: id bid name title publisher extra B表结构如下 id bid name title p ...

  2. mysql表连接算法_如何在MySQL中连接多个表

    我需要FULL OUTER JOIN多个表.我知道如何从 here开始加入两个表.但我有几个表,我不能将它们应用于它们.我怎样才能实现它? 我的SQL代码,如下: INSERT INTO table ...

  3. 温故知新MySQL--如何在MySQL表中删除重复行

    2019独角兽企业重金招聘Python工程师标准>>> 如何在MySQL表中删除重复行 在实际应用中,会有需要删除重复数据的场景.这里简单介绍下如何删除重复的数据 1. 准备数据 C ...

  4. 如何在mysql 中建立有关联关系的表

    昨天在自己做的一个系统中使用mysql,折腾了半天始终无法建立外键,通过查找文档最终将问题解决,原来mysql中默认建立的表所使用的存储引擎为MyISAM类型,在这种类型的table中建立的外键只起到 ...

  5. mysql主从shardingsphere分库分表

    问题: 1. 公司的mysql主从复制方式怎么查看--这个命令在哪敲 2.公司扩容一个从的时候怎么做的?-- 3.公司主从架构模式是什么样的?几主几从 4.公司的业务场景有木有要求写后立马查出数据的 ...

  6. mysql data ibdata1_database - 如何在MySQL中收缩/清除ibdata1文件

    database - 如何在MySQL中收缩/清除ibdata1文件 我在localhost中使用MySQL作为在R中执行统计的"查询工具",也就是说,每次运行R脚本时,我创建一个 ...

  7. MySQL索引类型一览 让MySQL高效运行起来

    索引是快速搜索的关键.MySQL索引的建立对于MySQL的高效运行是很重要的.下面介绍几种常见的MySQL索引类型. 在数据库表中,对字段建立索引可以大大提高查询速度.假如我们创建了一个 mytabl ...

  8. mysql count 返回0_如何在MySQL中使用COUNT時返回0而不是null

    我正在使用此查詢返回存儲在$ sTable中的歌曲列表以及存儲在$ sTable2中的總項目的COUNT.如何在MySQL中使用COUNT時返回0而不是null /* * SQL queries * ...

  9. 如何在MySQL中为多个列指定唯一约束?

    我有一张桌子: table votes (id,user,email,address,primary key(id), ); 现在,我想使列的用户,电子邮件,地址唯一(在一起). 如何在MySql中执 ...

  10. 【转】 MySQL索引类型一览 让MySQL高效运行起来 mysql索引注意事项

    索引是快速搜索的关键.MySQL索引的建立对于MySQL的高效运行是很重要的.下面介绍几种常见的MySQL索引类型. 在数据库表中,对字段建立索引可以大大提高查询速度.假如我们创建了一个 mytabl ...

最新文章

  1. Mysql修改设置root密码的命令及方法
  2. [常见错误]-bash: pg_config: command not found
  3. 推荐几款好用到爆炸的SSH客户端工具
  4. PAT1005 继续(3n+1)猜想 (25 分)【vector erase需要注意的地方】
  5. IIS 7.0 安装SSL证书过程
  6. solr 6.4 mysql_solr6.4.1搜索引擎(2)首次同步mysql数据库
  7. MyBatis(六)------MyBatis映射器(select元素、insert元素、update元素、select元素、sql元素)
  8. EDA软件_AD14绘制等长线
  9. fedora oracle使用,【解决方案】连接到Fedora 14上的Oracle数据库服务器
  10. IPEmotion 2022 R1支持ARINC 429数据总线标准
  11. DevOps成功的5个关键
  12. 用jk触发器构成二分频电路_JK触发器地应用设计.ppt
  13. iphone12绿色好看 ,相比被全民吐槽的蓝色,绿色是怎么做到零差评的
  14. android之基于百度语音合讯飞语音识别的语音交互
  15. 10款相似图片搜索引擎
  16. Matlab最小面积包围四边形
  17. 计算机考试ppt,计算机考试PPT.ppt
  18. 从零带你学Linux
  19. 基于Cellar的交互式单细胞数据分析
  20. 使用路由器搭建机器人局域网,进而远程机器人主机

热门文章

  1. vue上线后图片不显示_vue页面中图片不显示解决
  2. linux系统浏览器没有图片不显示,网页不显示图片怎么回事【解决方法】
  3. 《增长黑客》- 读书笔记(一)
  4. 2020年1024程序员节,成为CSDN博客专家
  5. 零基础学CocosCreator·第八季-双人对战五子棋
  6. Matlab读取股票数据
  7. 发现孔子家谱很有意思事情,南宗,北宗是怎么回事?
  8. 微型计算机原理及接口技术张云龙答案,电子职业技能训练报告2.docx
  9. 关于 opengl3.3 - 4.1 ABO 的感触. 传统 VBO往 ABO+VBO的 代码移植
  10. MySQL - MySQL 8.0(二)基本操作:对象