各位大佬们好!
数据库新人求助!今天查询数据库遇到一个三表join的问题:
假设是a,b,c三个表,大致的SQL是:
select c.* from a,b,c where b.xxx=c.xxx and c.yyyy='1' and a.uid = b.uid;
其中a.uid是主键,其余均有索引。
执行计划是a,b先hash join 然后结果跟c hash join。
实际排查发现如果b和c先hash join后,实际数据只有50条, 为此我用
select/+*ordered*/ c.* from b,c,a where b.xxx=c.xxx and c.yyyy='1' and a.uid = b.uid;
指定了顺序,执行计划变成了 b与c hash join 再和a hash。
现在的问题是,这一次执行计划中,b与c先hash join的结果,执行计划estimate row是1000万行,与实际情况有严重偏差。然后最后结果并没有效率提升。
请问这种情况下,我应该怎么办?
谢谢大佬们解惑!