咕噜咕噜502 2023-06-06 10:18 采纳率: 56.6%
浏览 27
已结题

left join查询,主表13万条数据副表8000条,连接条件不是主键,怎么优化查询?

img


像这个查询,cc_sjz_3有13万条数据,biz_type = ‘bank’ 它也有11万多条,cc_company_branch根据comb_name分组后有8000条数据,去进行左连接,连接条件不是主键,给主表cc_sjz_3的comb_name添加了索引发现没有使用上

img


像这种怎么去优化呢?

  • 写回答

2条回答 默认 最新

  • 梦幻编织者 2023-06-06 10:28
    关注

    使用INNER JOIN代替LEFT JOIN
    如果cc_sjz_3表中所有的comb_name都存在于cc_company_branch表中,可以使用INNER JOIN代替LEFT JOIN,这样可以减少连接操作,提高查询效率。

    将cc_company_branch表中的comb_name添加索引
    虽然左连接的连接条件不是主键,但是如果cc_company_branch表中的comb_name添加了索引,可以提高连接操作的效率。

    使用子查询代替左连接
    如果以上两种优化方案都无法提高查询效率,可以考虑使用子查询代替左连接,将cc_company_branch表的数据先查询出来,再与cc_sjz_3表进行连接操作。例如:

    SELECT MD5(UUID()) card_id,
    t1.phone,
    t1.new_card_no,
    t3.comb_id,
    t1.person_name,
    t1.id_card,
    t1.biz_type,
    t1.open_time,
    'NOT DELETE' delete_flag
    FROM cc_sjz_3 t1,
    (SELECT comb_id, comb_name FROM cc_company_branch GROUP BY comb_name) t3
    WHERE t1.biz_type = 'bank'
    AND t1.comb_name = t3.comb_name;
    
    

    这种方式可以避免左连接的效率问题,但是需要注意子查询的数据量不能太大,否则会影响整个查询的效率。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 6月13日
  • 修改了问题 6月6日
  • 修改了问题 6月6日
  • 修改了问题 6月6日
  • 展开全部

悬赏问题

  • ¥15 单纯型python实现编译报错
  • ¥15 c++2013读写oracle
  • ¥15 c++ gmssl sm2验签demo
  • ¥15 关于模的完全剩余系(关键词-数学方法)
  • ¥15 有没有人懂这个博图程序怎么写,还要跟SFB连接,真的不会,求帮助
  • ¥15 PVE8.2.7无法成功使用a5000的vGPU,什么原因
  • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
  • ¥15 安装quartus II18.1时弹出此error,怎么解决?
  • ¥15 keil官网下载psn序列号在哪
  • ¥15 想用adb命令做一个通话软件,播放录音