mysql 连表查询需要优化

我现在有a表 90w数据 b表14w数据

a,b 表都有ftbh ming 这两个字段

现在要查询两张表中字段值一样的a表记录

比如 a表的一条记录的ftbh字段值 为11 ming的值为"学成"

然后 b表也有一条记录的ftbh字段值 为11 ming的值为"学成" 且b表的ftbh 字段大于0

根据这三个条件 查找a b 表共有的数据 但显示a表的数据 这些在b表中有的数据 还需要删除

我写的low bi 查询语句

a表为sst_ocenter_qmname b表为sst_qiming_name

SELECT 
oc.id, oc.ftbh, oc.ming
FROM sst_ocenter_qmname oc 
JOIN 
sst_qiming_name qm
ON oc.ftbh = qm.ftbh
AND qm.ftbh > 0
AND oc.ming = qm.ming

使用join好像情况也没有好转

SELECT
    oc.id,oc.ftbh,oc.ming
FROM
    sst_ocenter_qmname oc,
JOIN
    sst_qiming_name qn
ON    oc.ftbh = qn.ftbh
AND oc.ming = qn.ming
AND qn.ftbh > 0
阅读 2.5k
2 个回答

如果要优化,优化方向考虑减少驱动表的数据量,你这个 SQL 无论哪个表作为驱动表都是全表扫描啊。

  • 加上 where 条件(注意索引),把没用的数据过滤掉,减少驱动表的数据,b 表数据量比 a 表小,可以考虑
  • 联表条件加上索引(被驱动表),可以为 (ftbh, ming)
  • 一些优化设置 set optimizer_switch='mrr=on,mrr_cost_based=off,batched_key_access=on';

是在 on 后面加where吗?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题