zoukankan      html  css  js  c++  java
  • [MySQL] MySQL联表查询的执行顺序优化查询

    SELECT t4.orgName,
                       t3.projectName,
                       t3.Partner,
                       t1.type,
                       COUNT(DISTINCT t1.imei) AS count
                FROM `t_teminal` AS t1
                LEFT JOIN `t_orgcode_orgid_rela` AS t2
                  ON t1.orgid = t2.orgId
                LEFT JOIN `t_org_code` AS t3
                ON t2.topOrganizationCode = t3.topOrganizationCode
                LEFT JOIN `t_organization` AS t4
                ON t1.orgid = t4.orgId
                GROUP BY t1.orgid
    

    联表查询会涉及到多个表的操作, 在索引的利用上会受限制. 上面的命令执行时间720s

    以上面为例, 因为join查询的实现原理[MySQL 的Join及底层实现原理], 导致驱动表t1表的索引失效。而t1表的是最庞大的表, 约有50万行数据, 而其他表只是几百行的配置信息表.

    所以利用t1表的索引是性能的关键.

    由于统计中有groupby and count的需求,通过t1表即可实现, 顺势使用了子查询, 先处理完t1,再去匹配信息. 

    这种思路很简单,但应该对各种业务导向的报表查询都有帮助,.

    下面的命令执行时间3.6s

    SELECT
    	t4.orgName,
    	t3.projectName,
    	t3.Partner,
    	t1.type,
    	t1.count
    FROM
    	(
    		SELECT
    			orgid,
    			type,
    			COUNT(DISTINCT imei) AS count
    		FROM
    			`t_teminal`
    		GROUP BY
    			orgid
    	) AS t1
    LEFT JOIN `t_orgcode_orgid_rela` AS t2 ON t1.orgid = t2.orgId
    LEFT JOIN `t_org_code` AS t3 ON t2.topOrganizationCode = t3.topOrganizationCode
    LEFT JOIN `t_organization` AS t4 ON t1.orgid = t4.orgId
    

      

  • 相关阅读:
    artZoom 图片可放大旋转
    Node.js究竟是什么?
    图片上传 纯js编码
    图片上传jQuery插件(兼容IE8)
    nodejs API(二)
    zuul网关
    Hystrix集群及集群监控turbine
    熔断器Hystrix及服务监控Dashboard
    Ribbon负载均衡及Feign消费者调用服务
    Eureka集群
  • 原文地址:https://www.cnblogs.com/oDoraemon/p/9001326.html
Copyright © 2011-2022 走看看