我经常遇到编写Oracle SQL查询的问题,优化器在基数上做出可疑的选择。请考虑以下事项:
select t.*
from t
join (select ...
from ...
where ...) t2 on t2.col = t.col;
实际的查询文本并不重要,它的结构更多。我想知道的是如何告诉优化器我知道,例如即使它认为t2将导致200万行,事实上,它可能更像是1000。
要清楚,它是我尝试影响的内联视图的基数,而不是组成表的基数。
我知道基数和opt_estimate提示并已成功使用它们,但仅用于静态表,而不是内联视图或CTE。我认为它可能涉及qb_name提示并且已经取得了一些成功,但在这种情况下并非如此。