TIDB 执行SQL 慢

执行计划一样的

Hint里面的 b,a换成d,A

看样子现在的执行计划是先通过这个扫描了A的数据和B表关联之后,在和c,d,e进行关联。

目前看条件是 d.truename 过滤条件是最好的,要先通过d过滤出的personid,在和A和B两个大表去nested loop join是比较好的。

试试 /*+ LEADING(t1, t2) / 这个hint,在最上面select 后加 /+ LEADING(a, d) */

查询速度一样

语句修改成,d innerjoin a,inner join b,然后其它语句不变还都是left join呢?

这样数据对不会

这样数据会不对

e表的unitid有索引吗?和d表的关联字段类型一样吗?

一样的,是我们经常使用的主要表

数据不会有问题,因为你本身这样写数据库也会帮你优化成inner join的,因为你a left join b,b有where条件会优化成内连接。

嗯,我试下

要把所有的left 都去了才有效果

我感觉应该是tidb优化器成本评估方面存在问题,这个得让官方大佬解答了。

:joy:

你一步一步调试下看看,先a d b三个表带where条件查询下看效率如何。然后 adb c,然后再加上e。一步步看是哪里评估错了,再想办法看是否可以有针对性的优化下。