【 TiDB 使用环境】测试
【 TiDB 版本】 v6.1.1
【遇到的问题】
为什么简单的查询语句,被认为是笛卡尔乘积?
select min(k), max(k) from mytable;
报错:ERROR 8110 (HY000): Cartesian product is unsupported
【复现路径】
【问题现象及影响】
【 TiDB 使用环境】测试
【 TiDB 版本】 v6.1.1
【遇到的问题】
为什么简单的查询语句,被认为是笛卡尔乘积?
select min(k), max(k) from mytable;
报错:ERROR 8110 (HY000): Cartesian product is unsupported
【复现路径】
【问题现象及影响】
发下表结构和explain结果
哈?今天才第一天玩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吧。
老兄,第一天玩都会修改参数重启数据了,很强啊!我第一天玩时候都搞不懂HTAP概念。。。
好的大哥,非常感谢!像改配置这种运维操作我倒容易理解 。相互学习
恭喜你找到bug
又学到了一个坑
学习了,学习了
恭喜找到bug