java学习基地

微信扫一扫 分享朋友圈

已有 1207 人浏览分享

为什么MySQL不推荐使用子查询和join

[复制链接]
1207 0

1.关于mysql,没有保举利用子查询战join是由于自己join的服从便是硬伤,一旦数据帘败年夜服从便很易包管,激烈保举别离按照索引单表与数据,然后正在法式内里做join,merge数据。

2.子查询便更别用了,服从太好,施行子查询时,MYSQL需求创立暂时表,查询终了后再删除那些暂时表,以是,子查询的速率会遭到必然的影响,那里多了一个创立战烧毁暂时表的历程。

3.假如是JOIN的话,它是走嵌膛鲩询的。小表驱动年夜表,且经由过程索引字段停止联系关系。假如表记载比力少的话,仍是OK的。年夜的话营业逻辑中能够掌握处置。

4.数据库是最蹬鲢的,瓶颈常常是数据库。倡议数据库只是做为数据store的东西,而没有要增加营业上来。

1、使用层联系关系的劣势

瘸龊存的服从更下。很多使用法式能够便利天缓存单表查询洞喀的成果工具。假如联系关系中的某个表发作了变革,那末便没法利用查询缓存了,而拆分后,假如某个表很少改动,那末基于该表的查询就能够反复操纵查询缓存成果了。

  • 将查询合成后,施行单个查询能够削减锁的合作。

  • 正在使用层做联系关系,能够更简单对数据库停止拆分,更简单做到下机能战可扩大。

  • 查询自己服从也能够会有所提拔。查询id散的时分,利用IN()替代联系关系查询,可让MySQL根据ID挨次停止查询,那能够比随机的联系关系要更下效。

  • 能够削减冗余记载的查询。正在使用层做联系关系查询,意味着关于某笔记录酽用只需求查询一次,而正在数据库中做联系关系查询,则能够需

  • 要反复天会见一部门数据。从那面看,如许的重构借能够会削减收集战内存当丙素。

  • 更进一步,如许做相称于正在使用中完成了哈希联系关系,而没有是利用MySQL的嵌套轮回联系关系。钠舂场景哈希联系关系的服从要下许多。



2、使用层联系关系的利用场景
  • 当使用可以便利天缓存单个查询的成果的时分

  • 当能够将数据散布到差别的MySQL效劳器上的时分

  • 当可以利用IN()的方法替代联系关系查询的时分

  • 并收场景多,DB查询频仍,需求分库非


3、没有保举利用join的缘故原由

1.DB负担的营业压力年夜,能削减承担便削减。当表处于百万级别后,join招致机能降落;

2.散布式的分库非。这类时分是没有倡议跨库join的。今朝mysql的散布式中心件,跨库join表示没有良。

3.修正表的schema,单表查询的修正比力简单,join写的sql语句要修正,没有简单发明,本钱比力年夜,当体系比力年夜时,欠好保护。

4、没有利用join的处理计划

正在营业层,单表查询出数据后,做为前提给现位个单表查询。也便是子查询。会担忧子查询出去的成果散太多。mysql对in的数目出有限定,可是mysql限定整条sql语句的巨细。经由过程调解参数max_allowed_packet ,能够修正一条sql的最年夜值。倡议正在营业上做益处理,限定一次查询出去的成果散是能承受的。

5、join查询的劣势

联系关系查询的益处是能够做分页,能够用副表的字段做查询前提,正在查询的时分,将副表婚配到的字段做为成果散,用主表来in它。可是成绩去了,假如婚配到的数据量太年夜便不可了,颐挥嗅招致返回的分页记载跟实践的纷歧样,处理的办法能够交给前端,一次性查询,让前端分批显现就能够了,这类处理计划的条件是数据量没有太,由于sql自己少度有限。



举报 使用道具

回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

0

关注

1

粉丝

307

主题
精彩推荐
热门资讯
网友晒图
图文推荐

Archiver|手机版|java学习基地 |网站地图

GMT+8, 2021-4-11 06:19 , Processed in 0.273448 second(s), 27 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.