慢sql join与left join执行时间差异很大

为提高效率,提问时请尽量提供详细背景信息,问题描述清晰可优先响应。以下信息点请尽量提供:

  • 系统版本 & kernel 版本】centos7.6
  • TiDB 版本】3.0.3
  • 磁盘型号】SSD
  • 集群节点分布】3个PD节点,3个TIDB节点,4个tikv节点
  • 数据量 & region 数量 & 副本数】150G,9426, 2
  • 问题描述(我做了什么)】慢sql优化,join与left join结果一致,leftjoin执行时间过长

1、join脚本以及explain结果,请查看附件。join-explain结果.txt (3.6 KB)

2、left join脚本以及explain结果。请查看附件。left join-explain结果 .txt (3.6 KB)

请大佬帮忙看下执行结果为什么差异偏大。以及使用left join如何优化。谢谢

  • 关键词】慢sql

麻烦提供下表结构以及简单排查下表的统计信息是否过久:https://pingcap.com/docs-cn/v3.0/reference/performance/statistics/#统计信息简介

表结构.txt (8.8 KB) ANALYZE table QbExam

OK 时间: 4.982s

ANALYZE table QbPaper

OK 时间: 8.927s

麻烦执行一下看下效果

explain ANALYZE
SELECT count(1)
FROM QbPaper qb
  inner JOIN QbPapertype qp     ON qb.papertypeId= qp.papertypeId   
  LEFT JOIN QbSubject qs     ON qb.subjectId = qs.subjectId  
  LEFT JOIN QbExam qe     ON qb.paperId=qe.paperId
WHERE 1=1
    AND qb.paperAuditstatus = 'Y'
    AND qb.classId='CLASS20190716060000000014'
    AND qp.papertypeAvlstatus = 'Y'
    AND qb.paperAvlstatus='Y'
    AND qb.paperPublicstatus='S'
    AND qb.paperDelstatus='N'
    AND qp.papertypeCode='LNZT'
ORDER BY  qb.paperCreateddate desc, qb.paperId DESC

脚本.txt (3.0 KB)

请查收

1、使用left join的时候,QbPaper 执行计划为什么join不一致。 2、left join在tidb层,优化器把left join 转成inner join。

初步推断由于优化器问题对该场景的支持不够友好,已经通知相关的研发同事跟进。后续有结果会进一步反馈。感谢问题反馈。

已经与研发确认了,后续版本会优化相关的场景, 4.0 会提供 join oder 的 hint 。感谢问题反馈。