为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
- 【TiDB 版本】:v4.0-rc
- 【问题描述】:
同一条SQL,带limit 和不带limit
select ..... limit 0, 1000
select .....
通过explain analyze 发现:
带limit,触发使用了算子 IndexMergeJoin, 中间数据集为0
不带limit,触发使用了算子 IndexHashJoin,中间数据集为1.4w条
这是个bug,参考:https://github.com/pingcap/tidb/issues/15687。 具体:IndexMergeJoin使用了错误的计算逻辑,导致计算数据为空;官方改用UnionRanges 支持数据处理。
想确认下,15687 这个issue 没在tidb-v4.0.0-rc版本里,那是在tidb-v4.0.0-rc.1?
另外,通过强制指定查询规划,也无效:
SELECT /*+ INL_HASH_JOIN(table1, table2 )*/ ...... limit 1, 1000
SELECT /*+ HASH_JOIN(table1, table2 )*/ ...... limit 1, 1000
explain analyze 还是在用IndexMergeJoin。
想问问,执行计划绑定 还有其他方法嘛,我们如何先绕过去这个bug?