MYSQL一个优化的过程

背景:优化一个20数据的表查询
###优化前
 EXPLAIN
SELECT DISTINCT
  ect.contract_no AS contractCode,
  ect.contract_name AS contractName,
  NULL AS supplierId,
  ect.b_name AS supplierName
FROM
  `eva_test` ect
  LEFT JOIN td_outline_test toa
    ON ect.`contract_no` = toa.`contract_no`
WHERE toa.`contract_no` IS
ORDER BY ect.`id`;

###优化后
 EXPLAIN
SELECT
  ect.contract_no AS contractCode,
  ect.contract_name AS contractName,
  NULL AS supplierId,
  ect.b_name AS supplierName
FROM
  `eva_test` ect
  LEFT JOIN td_outline_test toa
    ON ect.`contract_no` = toa.`contract_no`
WHERE toa.`contract_no` IS NULL 
 ORDER BY ect.`id`; ###查询合同编号的数量大于1的合同

###使用EXISTS ,在使用优化后
   EXPLAIN
  SELECT
    ect_out.contract_no AS contractCode,
    ect_out.contract_name AS contractName,
    NULL AS supplierId,
    ect_out.b_name AS supplierName
  FROM
    eva_test ect_out
  WHERE NOT EXISTS
    (SELECT
      toa.`contract_no`
    FROM
      td_outline_test toa
    WHERE ect_out.`contract_no` = toa.`contract_no`)
  ORDER BY ect_out.`id`;
  
 ###使用eva_test.contract_no字段的索引,不推荐使用
 SELECT 
  ect_out.contract_no AS contractCode,
  ect_out.contract_name AS contractName,
  NULL AS supplierId,
  ect_out.b_name AS supplierName
FROM
  eva_test ect_out
WHERE ect_out.`contract_no` NOT IN
  (SELECT DISTINCT
    ect.contract_no
  FROM
    `eva_test` ect
    LEFT JOIN td_outline_test toa
      ON ect.`contract_no` = toa.`contract_no`
  WHERE toa.`contract_no` IS NOT NULL) ;
  
  ####辅助查询
  SELECT
    contract_no,
    COUNT(contract_no) AS COUNT
  FROM
    eva_test
  GROUP BY contract_no
  HAVING COUNT(contract_no) > 1
  ORDER BY countDESC;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值