mysql联合查询语句(关联两个不同数据库查询)

上一篇讲的是单表查询的优化,没看过的朋友可以去看看(本文末有链接)。当然,对数据表的多表查询也是必不可少的。本篇内容主要讲解多表联合查询的优化,阅读后有收获的朋友可以收藏关注一波,本头条号内有多个专题,致力于长期分享高质量原创java文章。

一、多表查询连接的选择:

mysql联合查询语句(关联两个不同数据库查询)

相信这内连接,左连接什么的大家都比较熟悉了,当然还有左外连接什么的,基本用不上我就不贴出来了。这图只是让大家回忆一下,各种连接查询。 然后要告诉大家的是,需要根据查询的情况,想好使用哪种连接方式效率更高。(这是技术文)

二、MySQL的JOIN实现原理在MySQL 中,只有一种Join 算法,就是大名鼎鼎的Nested Loop Join,他没有其他很多数据库所提供的Hash Join,也没有Sort Merge Join。顾名思义,Nested Loop Join 实际上就是通过驱动表的结果集作为循环基础数据,然后一条一条的通过该结果集中的数据作为过滤条件到下一个表中查询数据,然后合并结果。如果还有第三个参与Join,则再通过前两个表的Join 结果集作为循环基础数据,再一次通过循环查询条件到第三个表中查询数据,如此往复。 ——摘自《MySQL 性能调优与架构设计》

三、补充:mysql对sql语句的容错问题即在sql语句不完全符合书写建议的情况,mysql会允许这种情况,尽可能解释它:

1)一般cross join后面加上where条件,但是用cross join+on也是被解释为cross join+where;

2)一般内连接都需要加上on限定条件,如上面场景一;如果不加会被解释为交叉连接;

3)如果连接表格使用的是逗号,会被解释为交叉连接;

注:sql标准中还有union join和natural inner join,mysql不支持,而且本身也没有多大意义,其实就是为了“健壮”。但是其实结果可以用上面的几种连接方式得到。

三、超大型数据尽可能尽力不要写子查询,使用连接(JOIN)去替换它:当然,关于这句话,也不一定就全是这样。

1)因为在大型的数据处理中,子查询是非常常见的,特别是在查询出来的数据需要进一步处理的情况,无论是可读性还是效率上,这时候的子查都是更优。

2)然而在一些特定的场景,可以直接从数据库读取就可以的,比如一个表(A表 a,b,c字段,需要内部数据交集)join自己的效率必然比放一个子查在where中快得多。(这真是技术文)

四、使用联合(UNION)来代替手动创建的临时表UNION是会把结果排序的!!!

union查询:它可以把需要使用临时表的两条或更多的select查询合并的一个查询中(即把两次或多次查询结果合并起来。)。在客户端的查询会话结束的时候,临时表会被自动删除,从而保证数据库整齐、高效。使用union来创建查询的时候,我们只需要用UNION作为关键字把多个select语句连接起来就可以了,要注意的是所有select语句中的字段数目要想同。

#

要求:两次查询的列数必须一致(列的类型可以不一样,但推荐查询的每一列,相对应的类型要一样)

可以来自多张表的数据:多次sql语句取出的列名可以不一致,此时以第一个sql语句的列名为准。

如果不同的语句中取出的行,有完全相同(这里表示的是每个列的值都相同),那么union会将相同的行合并,最终只保留一行。也可以这样理解,union会去掉重复的行。

如果不想去掉重复的行,可以使用union all。

如果子句中有order by,limit,需用括号()包起来。推荐放到所有子句之后,即对最终合并的结果来排序或筛选。

mysql联合查询语句(关联两个不同数据库查询)

注意:

1、UNION 结果集中的列名总是等于第一个 SELECT 语句中的列名

2、UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同

UNION ALL的作用和语法:

默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。

mysql联合查询语句(关联两个不同数据库查询)

五、总结(1)对于要求全面的结果时,我们需要使用连接操作(LEFT JOIN / RIGHT JOIN / FULL JOIN);

(2)应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:

mysql联合查询语句(关联两个不同数据库查询)

备注、描述、评论之类的可以设置为 NULL,其他最好不要使用NULL。

不要以为 NULL 不需要空间,比如:char(100) 型,在字段建立时,空间就固定了, 不管是否插入值(NULL也包含在内),都是占用 100个字符的空间的,如果是varchar这样的变长字段, null 不占用空间。

可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:

select id from t where num = 0

(3)in 和 not in 也要慎用,否则会导致全表扫描,如:

mysql联合查询语句(关联两个不同数据库查询)

对于连续的数值,能用 between 就不要用 in 了:

mysql联合查询语句(关联两个不同数据库查询)

很多时候用 exists 代替 in 是一个好的选择:

mysql联合查询语句(关联两个不同数据库查询)

(4)尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能,并会增加存储开销。这是因为引擎在处理查询和连 接时会逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了。

(5)尽量使用表变量来代替临时表。如果表变量包含大量数据,请注意索引非常有限(只有主键索引)。

(6)不要以为使用MySQL的一些连接操作对查询有多么大的改善,其实核心是索引

秒鲨号所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈!本站将在三个工作日内改正。
(0)

大家都在看

  • 擦玻璃有哪些方法

    简要回答 在每年春节来临的时候,每一家都要搞一次大扫除,但其实真正爱干净的人,随时随地的都在擦玻璃,那么大家是否知道擦玻璃有哪些方法吗?下面我们来看一下。通常我们玻璃上会有一些灰尘…

    2022年6月11日
  • 支付宝免密支付怎么取消(怎么取消支付宝免密支付)

      大家平时买东西的时候,应该都有过这样的体验,就是还没有输入支付密码就支付成功了,这其实就是开启了小额免密支付,免密支付有时候是挺方便的,但是买东西这个事儿,总有想再考虑考虑的时…

    2022年6月22日 百科问答
  • 传感器节点由哪四个部分组成(简介传感器节点的基本组成部分)

    设计无线传感器网络时最需要注意的就是能量的管理了,能量是传感网的生命支撑,它直关乎到整个网络的运行效率以及生命周期。因此对能量的有效管理就变得无比的重要了。 在无线网络通信中,能量…

    2021年7月12日 百科问答
  • 日常脚冷该怎么来改善

    简要回答 由于每个人的体质都是不同的,比如说,有些人在睡觉的时候会导致虚汗,当然也有部分小伙伴脚特别的冷。一般脚冷以后,想要改善的话,可以通过泡脚的方式来有效的缓解。毕竟泡脚能够提…

    2022年5月23日 百科问答
  • 男人很想念你但不联系的原因是什么?

    男人很想念你但不联系的原因可能是:他不想让你太依赖感情;他还不太确定你的心意;他害怕打扰你,惹你生气;他是真的很忙,没有时间联系你;他想长久跟你走下去等等。 男人很想念你但不联系的…

    2022年1月14日
  • 第一届中国好声音冠军梁博现状(曝光梁博各种内部消息)

    29年新一季《中国好声音》已经回归了。那英、庾澄庆、王力宏、李荣浩全新导师阵容亮相给足人惊喜。从22年首播至今,《好声音》已经播到了第八季,但节目一直以来都被外界诟病收视率很高就是…

    2022年6月4日 百科问答
  • 诺基亚破产的根本原因(分享诺基亚破产真相大揭秘)

    诺基亚曾经的辉煌 曾几何时,这个铃声风靡全国,而这个铃声的承载者-诺基亚,更是被看作是实用和潮流的代名词。 因为在那个家用座机横行的时代里,移动手机并不是普遍存在的。这个时候,当别…

    2021年6月15日 百科问答
  • 集成灶的优点和缺点

    简要回答 时代在不断发展的今天,人们会选择集成灶。毕竟使用集成灶的时候会有众多的优势,比如说集成灶在使用的时候,特别简单方便,并且大部分集成灶已经采用智能控制,因此人们使用的时候是…

    2022年5月30日 百科问答
  • 游戏笔记本推荐2022性价比

    简要回答 普暗夜精灵6,联想拯救者Y7000P,神舟战神G9-CU7PK,雷神(THUNDEROBOT) 911Air星战三代进阶版,微星(msi)冲锋坦克Ⅱ GL65。 详细内容…

    2022年2月22日 百科问答
  • 豇豆的种植时间和种植方法是怎么样的

    简要回答 通常情况下,豇豆在种植的时候是在每年的3~7月份。一般江浙一带的话,种植豇豆可能会在3月下旬的样子。而我国华南地区可能会在2月份左右。不得不说,每个地区气温环境不同,种植…

    2022年6月29日
品牌推广 在线咨询
返回顶部