执行计划一样的
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优化器成本评估方面存在问题,这个得让官方大佬解答了。
你一步一步调试下看看,先a d b三个表带where条件查询下看效率如何。然后 adb c,然后再加上e。一步步看是哪里评估错了,再想办法看是否可以有针对性的优化下。