为什么这条简单的SQL会被认为是笛卡尔乘积?

【 TiDB 使用环境】测试
【 TiDB 版本】 v6.1.1
【遇到的问题】
为什么简单的查询语句,被认为是笛卡尔乘积?

select min(k), max(k) from mytable;

报错:ERROR 8110 (HY000): Cartesian product is unsupported

【复现路径】
【问题现象及影响】

发下表结构和explain结果

表结构已附上图,explain也不出来。应该是DBA做了限制

又找到 bug了~ 恭喜

哈?今天才第一天玩TiDB 。直接就来了个BUG?

show create table语句

tidb相关的配置参数修改下:

注意如下操作需要重启TiDB实例!!!
去掉图片中的这个performance.cross-join: false
然后 tiup cluster reload -R tidb

然后再作下表的执行计划看看?

优化器在逻辑优化部分把这个通过索引获取max(),min()的转换成了两个topN然后做cross join了。
在逻辑优化后检查经过逻辑优化后的SQL是否存在cross join并且是否设置了performance.cross-join=false,如果是,那么就会报你刚才的那个错误。这个我认为可以理解为优化器的BUG,毕竟cross join是优化器自己做逻辑优化产生的,并不是用户行为。
临时绕过方法就是去掉这个performance.cross-join=false 配置参数。
去提一个issue吧。

1 个赞

老兄,第一天玩都会修改参数重启数据了,很强啊!我第一天玩时候都搞不懂HTAP概念。。。

好的大哥,非常感谢!像改配置这种运维操作我倒容易理解 :grin:。相互学习 :handshake: :handshake: :handshake:

恭喜你找到bug

又学到了一个坑

学习了,学习了

恭喜找到bug