我的编程空间,编程开发者的网络收藏夹
学习永远不晚

mysql的join查询和多次查询方法是什么

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

mysql的join查询和多次查询方法是什么

这篇文章主要讲解了“mysql的join查询和多次查询方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql的join查询和多次查询方法是什么”吧!

    join查询和多次查询比较

    MySQL多表关联查询效率高点还是多次单表查询效率高?

    在数据量不够大的时候,用join没有问题,但是一般都会拉到service层上去做

    第一:单机数据库计算资源很贵,数据库同时要服务写和读,都需要消耗CPU,为了能让数据库的吞吐变得更高,而业务又不在乎那几百微妙到毫秒级的延时差距,业务会把更多计算放到service层做,毕竟计算资源很好水平扩展,数据库很难啊,所以大多数业务会把纯计算操作放到service层做,而将数据库当成一种带事务能力的kv系统来使用,这是一种重业务,轻DB的架构思路

    第二:很多复杂的业务可能会由于发展的历史原因,一般不会只用一种数据库,一般会在多个数据库上加一层中间件,多个数据库之间就没办法join了,自然业务会抽象出一个service层,降低对数据库的耦合。

    第三:对于一些大型公司由于数据规模庞大,不得不对数据库进行分库分表,对于分库分表的应用,使用join也受到了很多限制,除非业务能够很好的根据sharding key明确要join的两个表在同一个物理库中。而中间件一般对跨库join都支持不好。

    举一个很常见的业务例子,在分库分表中,要同步更新两个表,这两个表位于不同的物理库中,为了保证数据一致性,一种做法是通过分布式事务中间件将两个更新操作放到一个事务中,但这样的操作一般要加全局锁,性能很捉急,而有些业务能够容忍短暂的数据不一致,怎么做?让它们分别更新呗,但是会存在数据写失败的问题,那就起个定时任务,扫描下A表有没有失败的行,然后看看B表是不是也没写成功,然后对这两条关联记录做订正,这个时候同样没法用join去实现,只能将数据拉到service层应用自己来合并了。。。

    事实上,用分解关联查询的方式重构查询具有如下优势:

    让缓存的效率更高。

    许多应用程序可以方便地缓存单表查询对应的结果对象。另外对于MySQL的查询缓存来说,如果关联中的某个表发生了变化,那么就无法使用查询缓存了,而拆分后,如果某个表很少改变,那么基于该表的查询就可以重复利用查询缓存结果了。

    将查询分解后,执行单个查询可以减少锁的竞争。

    在应用层做关联,可以更容易对数据库进行拆分,更容易做到高性能和可扩展。

    查询本身效率也可能会有所提升

    可以减少冗余记录的查询。

    更进一步,这样做相当于在应用中实现了哈希关联,而不是使用MySQL的嵌套环关联,某些场景哈希关联的效率更高很多。

    查询语句join、on、where执行顺序

    MySQL 的执行顺序

    一、典型SELECT语句完整的执行顺序

    1)from子句组装来自不同数据源的数据;

    2)使用on进行join连接的数据筛选

    3)where子句基于指定的条件对记录行进行筛选;

    4)group by子句将数据划分为多个分组;

    5)cube, rollup

    6)使用聚集函数进行计算;

    7)使用having子句筛选分组;

    8)计算所有的表达式;

    9)计算select的字段;

    10)使用distinct 进行数据去重

    11)使用order by对结果集进行排序。

    12)选择TOPN的数据

    二、from

    如果是采用的 关联 from tableA, tableB ,这2个表会先组织进行笛卡尔积,然后在进行下面的 where、group by 等操作。

    三、on

    如果使用left join, inner join 或者 outer full join的时候,使用on 进行条件筛选后,在进行join。

    看下面的2个sql 和结果。2者的区别仅仅是在on后面的一个语句在on和where位置的不同。 由此可以看出是先通过on 进行条件筛选,然后在join,最后在进行where条件筛选。

    假如:是先进行join,在进行on的话,会产生一个笛卡尔积,然后在筛选。这样的left join 和 直连接 没有任何的区别。 所以肯定是先on 条件筛选后,在进行join。

    假如:是在进行where 后,在on,在进行join, 下面2个sql的返回结果应该是一样的。由此可以见,where是针对 join 后的集合进行的筛选。

    综上: 先 执行on 条件筛选, 在进行join, 最后进行where 筛选

    SELECT DISTINCT a.domain , b.domain
    FROM mal_nxdomains_raw a
    LEFT JOIN mal_nxdomains_detail b ON a.domain = b.domain AND b.date = ‘20160403'
    WHERE a.date = ‘20160403'

    mysql的join查询和多次查询方法是什么

    SELECT DISTINCT a.domain , b.domain
    FROM mal_nxdomains_raw a
    LEFT JOIN mal_nxdomains_detail b ON a.domain = b.domain #and b.date = ‘20160403'
    WHERE a.date = ‘20160403'
    AND b.date = ‘20160403'

    mysql的join查询和多次查询方法是什么

    四、on 条件与where 条件

    1、使用位置

    • on 条件位置在join后面

    • where 条件在join 与on完成的后面

    2、使用对象

    • on 的使用对象是被关联表

    • where的使用对象可以是主表,也可以是关联表

    3、选择与使用

    主表条件筛选:只能在where后面使用。

    被关联表,如果是想缩小join范围,可以放置到on后面。如果是关联后再查询,可以放置到where 后面。

    如果left join 中,where条件有对被关联表的 关联字段的 非空查询,与使用inner join的效果后,在进行where 筛选的效果是一样的。不能起到left join的作用。

    五、join 流程

    tableA join tableB, 从A表中拿出一条数据,到B表中进行扫描匹配。所以A的行数决定查询次数,B表的行数决定扫描范围。例如A表100条,B表200表,需要100次从A表中取出一条数据到B表中进行200次的比对。

    相对来说从A表取数据消耗的资源比较多。所以尽量tableA选择比较小的表。同时缩小B表的查询范围。

    但是实际应用中,因为二者返回的数据结果不同,使用的索引也不同,导致条件放置在on 和 where 效率是不一定谁更好。要根据需求来确定。

    感谢各位的阅读,以上就是“mysql的join查询和多次查询方法是什么”的内容了,经过本文的学习后,相信大家对mysql的join查询和多次查询方法是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

    免责声明:

    ① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

    ② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

    mysql的join查询和多次查询方法是什么

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档

    猜你喜欢

    mysql的join查询和多次查询方法是什么

    这篇文章主要讲解了“mysql的join查询和多次查询方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql的join查询和多次查询方法是什么”吧!join查询和多次查询比较My
    2023-03-09

    mysql的join查询和多次查询方式比较

    目录join查询和多次查询比较查询语句join、on、where执行顺序一、典型SELECT语句完整的执行顺序二、from三、on四、on 条件与where 条件五、join 流程总结join查询和多次查询比较mysql多表关联查询效率高
    2023-03-09

    mysql中join关联查询的方法是什么

    在MySQL中,可以使用JOIN关键字来进行关联查询。JOIN关键字用于根据两个或多个表中的列之间的关系,将数据从这些表中连接在一起。JOIN关键字有多种类型,包括INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL J
    mysql中join关联查询的方法是什么
    2024-05-21

    mongodb多层次json查询的方法是什么

    MongoDB多层次JSON查询MongoDB支持使用点号符号导航嵌套JSON文档,进行有效的多层次数据查询。语法为:db.collection.find({"field.subfield":{$operator:value}})示例:查找街道地址包含"Main"的文档:db.users.find({"address.street":{$regex:/Main/i}})使用通配符匹配任何嵌套字段为"123"的文档:db.collection.find({"*":123})高级用法包括$elemMatch、
    mongodb多层次json查询的方法是什么
    2024-04-09

    MySQL多表查询的方法是什么

    这篇“MySQL多表查询的方法是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“MySQL多表查询的方法是什么”文章吧。多
    2023-07-04

    MySQL多条件查询的方法是什么

    在MySQL中,可以使用WHERE子句来实现多条件查询。具体的方法是在WHERE子句中使用AND或者OR来连接多个条件,这样就可以同时满足多个条件的查询要求。例如,假设我们有一个名为students的表,其中包含学生的信息,包括学生的姓名
    MySQL多条件查询的方法是什么
    2024-05-21

    mysql多层嵌套查询的方法是什么

    在MySQL中,多层嵌套查询可以通过子查询或联合查询来实现。以下是两种常用的多层嵌套查询方法:使用子查询:SELECT column1, column2FROM table1WHERE column1 IN (SELECT column
    mysql多层嵌套查询的方法是什么
    2024-04-11

    Mysql 多表连接查询 inner join 和 outer join 的使用

    首先先列举本篇用到的分类(内连接,外连接,交叉连接)和连接方法(如下): A)内连接:join,inner join B)外连接:left join,left outer join,right join,right outer join,union C)交叉连
    Mysql 多表连接查询 inner join 和 outer join 的使用
    2014-07-14

    ​SQLite多表查询的方法是什么

    SQLite多表查询方法SQLite提供多种JOIN运算符进行多表查询:1.INNERJOIN:检索匹配行,返回两表中存在匹配行的数据。2.LEFTJOIN:从左表检索所有行,即使右表无匹配行。3.RIGHTJOIN:从右表检索所有行,即使左表无匹配行。4.FULLJOIN:从两表检索所有行,即使无匹配行。示例:SELECT*FROMcustomersINNERJOINordersONcustomers.id=orders.customer_id;此查询从customers和orders表检索相关数据,包
    ​SQLite多表查询的方法是什么
    2024-04-10

    mongodb多表查询的方法是什么

    在 MongoDB 中,多表查询并不像关系型数据库那样直接支持 JOIN 操作。相反,通常需要使用聚合操作来执行多表查询。以下是一种常见的方法,用于在 MongoDB 中进行多表查询:使用 $lookup 聚合操作来在两个集合之间建立关联
    mongodb多表查询的方法是什么
    2024-04-09

    mysql多字段模糊查询的方法是什么

    在MySQL中进行多字段模糊查询的方法是使用OR运算符连接多个LIKE条件。例如,假设有一个名为users的表,其中包含name和email两个字段,我们想要同时在这两个字段中进行模糊查询,可以使用以下语句:SELECT * FROM
    mysql多字段模糊查询的方法是什么
    2024-04-09

    mysql去重查询的方法是什么

    在 MySQL 中,可以使用 DISTINCT 关键字来进行去重查询,该关键字用于返回唯一不同的值。以下是一个简单的示例:SELECT DISTINCT column1, column2 FROM table_name;上面的示例将返回
    mysql去重查询的方法是什么
    2024-04-09

    mysql优化查询的方法是什么

    MySQL 优化查询的方法包括但不限于以下几点:使用合适的索引:在查询中使用适当的索引可以大大提高查询性能。确保表中的字段有适当的索引可以加快查询速度。优化查询语句:使用合适的查询语句可以减少查询时间。避免使用 SELECT * 查询所有
    mysql优化查询的方法是什么
    2024-04-23

    mysql查询行号的方法是什么

    在MySQL中,可以使用ROW_NUMBER()函数来查询行号。该函数将为结果集中的每一行分配一个唯一的行号。例如,以下是一个使用ROW_NUMBER()函数查询行号的示例:SELECT ROW_NUMBER() OVER () AS
    mysql查询行号的方法是什么
    2024-05-22

    mysql查询时区的方法是什么

    要查询MySQL服务器当前的时区,可以使用以下SQL语句:SELECT @@global.time_zone;这将返回MySQL服务器的全局时区设置。如果要查询当前会话的时区设置,可以使用以下SQL语句:SELECT @@session
    mysql查询时区的方法是什么
    2024-04-17

    mysql查询数据的方法是什么

    要查询数据,可以使用以下语法:SELECT column1, column2, ...FROM table_nameWHERE condition;其中:column1, column2, ... 是要查询的列名table_name
    mysql查询数据的方法是什么
    2024-04-09

    MySQL分组查询的方法是什么

    MySQL中使用GROUP BY子句来实现分组查询。通过在SELECT语句中添加GROUP BY子句并指定需要分组的列,可以将结果集按照指定列的值进行分组,然后对每个分组进行聚合操作,如COUNT、SUM、AVG等。例如,以下是一个简单的
    MySQL分组查询的方法是什么
    2024-04-20

    编程热搜

    目录