mysql 多表关联查询如何加快速度_多表关联查询还会走索引吗

mysql 多表关联查询如何加快速度_多表关联查询还会走索引吗这个问题出现在多表关联时, 如一张商品表,其中的单位的字符串表示是在单位表中, 但这个单位的id之后进行了删除,并且不再奏效。 如下: select * from (select pg0.id,pg0

mysql多表关联时可能出错的地方,如搜索出的记录数据变少了。

这个问题出现在多表关联时,
如一张商品表,其中的单位的字符串表示是在单位表中,
但这个单位的id之后进行了删除,并且不再奏效。
如下:

 select *
        from (select pg0.id,pg0.init_size,pg0.goods_id,
        pg0.goods_move_size,pg0.execution,pg0.operation,
        pg0.create_time,pg0.update_time
        from psog_purchase_log pg0 where pg0.is_del=0
        and pg0.store_log_id = 15)pg
        left join psog_goods g on pg.goods_id = g.id
        left join psog_cate c on g.cate_id = c.id
        left join psog_unit u on g.unit_id = u.id
        where g.is_del = 0 and c.is_del = 0 and u.is_del = 0

可以看到最终where语句判定u.is_del=0,判定单位表不为空
但其实有时要查询的是一些记录数据,可能跟这个值关系不大,及时后来商品单位为空了也无所谓,
那么就可能改为下面这样:

        select *
        from (select pg0.id,pg0.init_size,pg0.goods_id,
        pg0.goods_move_size,pg0.execution,pg0.operation,
        pg0.create_time,pg0.update_time,pg0.is_del
        from psog_purchase_log pg0 where pg0.is_del=0
        and pg0.store_log_id = #{storeLogId})pg
        left join
        (select g0.id,g0.cate_id,g0.unit_id,g0.goods_name,g0.goods_code,g0.is_del from psog_goods g0 where g0.is_del=0)g
        on pg.goods_id = g.id
        left join
        (select c0.id,c0.is_del,c0.cate_name from  psog_cate c0 where c0.is_del=0)c
        on g.cate_id = c.id
        left join (select u0.unit,u0.id,u0.is_del from psog_unit u0 where u0.is_del=0)u
        on g.unit_id = u.id

可以看到上面每个判定数据有效的is_del在单独的关联时就已经做了排查,
这样的作用是基于最left的表为基准,之后的即使未关联到的某id=某id,
那么要查询的select * 里面的数据只变为空,而该行数据以最左边的表,即pg表为基准不管其它关联与否,要查询的
字段空与不空关系不是太大。

总结:
上面的sql查询时必须要能关联到类似商品分类商品单位名称的等等数据时才可以,否则那一行不予返回
而下面的这个sql只要pg表能查到那么之后的不管子表数据删除了没有,主表的数据还会展示

原文地址:https://www.cnblogs.com/ukzq/archive/2022/05/12/16263415.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/5264.html

(0)
上一篇 2023-05-16
下一篇 2023-05-16

相关推荐

  • java大数据最全课程学习笔记(4)-

    java大数据最全课程学习笔记(4)-目前CSDN,博客园,简书同步发表中,更多精彩欢迎访问我的gitee pages HDFS NN,2NN,DN及HDFS2.x新特性 NameNode和SecondaryNameNode(重点) NN

    2023-03-22
    128
  • Python脚本编写原始标题

    Python脚本编写原始标题Python是一门十分强大的编程语言,在众多开发领域都有广泛的应用。其中,Python脚本编写是开发中的常见需求,将代码逻辑组织成脚本可以让开发人员高效地完成某些自动化任务。Python脚本编写原始标题是Python脚本编写过程中不可避免的一部分,因为这可以帮助开发者更好地组织代码文件。

    2024-05-11
    75
  • 阿里云体验有奖:如何将 PolarDB-X 与大数据等系统互通[亲测有效]

    阿里云体验有奖:如何将 PolarDB-X 与大数据等系统互通[亲测有效]体验简介 场景将提供一台配置了CentOS 8.5操作系统的ECS实例(云服务器)。通过本教程的操作带您体验如何将PolarDB-X通过Canal与ClickHouse进行互通,搭建一个实时

    2023-05-24
    143
  • Python实现访问数据库的API接口设计

    Python实现访问数据库的API接口设计SQLAlchemy是一个Python SQL工具和对象关系映射器(ORM),可以方便地实现访问数据库的API接口,适用于多种关系型数据库。它提供了一种简单的方式来定义数据模型,并将其映射到数据库模式。相比于直接使用SQL语句,SQLAlchemy可以轻松地修改数据库模型而不用修改SQL语句。此外,SQLAlchemy还提供了一些高级功能,例如连接池、事务、数据库迁移等,使得访问数据库变得更加方便和可靠。

    2023-12-05
    117
  • Python中time.localtime()函数用法

    Python中time.localtime()函数用法在编程中,我们经常需要获取当前时间,时间戳等时间相关的信息,Python内置了一些常用的时间处理函数库,其中time是最常用的一个,本篇文章将会介绍time.localtime()函数的用法。

    2024-09-11
    25
  • Mysql单行字段拆分多行

    Mysql单行字段拆分多行 SQL单行拆分多行 不需要自建自增的辅助表,Mysql自带help_topic可以使用; SELECT SUBSTRING_INDEX( SUBSTRING_INDEX( target_co…

    2023-03-14
    147
  • 工作流加签是什么意思_流程团队

    工作流加签是什么意思_流程团队工作流引擎会签, 概要说明 关键字: ccflow 工作流引擎 会签,加签,主持人,多人处理规则 会签定义:会签就是多人在一个节点上表达意见,每个人只能在一个节点上填写一个意见。 我们提供两种模式的…

    2023-04-12
    155
  • 大数据运维:大数据平台+海量数据[通俗易懂]

    大数据运维:大数据平台+海量数据[通俗易懂]大数据开发独揽大权 大数据技术很早就在BAT这些公司生根发芽,但直到14、15年大数据技术才广泛应用在各大互联网公司,大数据技术由此深入各行各业。 此时大数据开发人才非常紧缺,很多公司大数据从立项,到

    2022-12-28
    162

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注