処理されたトランザクションを追跡するテーブルがいくつかあります。これらのテーブルには数百万行あります。最近の X トランザクションを調べたいことがよくあるので、次のようなクエリを使用して、いくつかのテーブルから必要な情報を取得します。
select a.id, b.field_one, c.field_two
from trans a, table_two b, table_three c
where a.id = b.id
and a.id = c.id
and a.id in
(select id from trans where id > (select max(id) from trans) - 100);
現在、クエリは非常に遅いです。説明計画は、B と C の完全なテーブル スキャンを示しています。ここで、ネストされたクエリを個別に評価し、カンマ区切りの ID のリストに置き換えると、クエリは非常に高速になります。これは私には明らかなように思えます-結合するのに100行しかないため、最初にAとBを結合してクエリに応答した場合よりももちろん高速になります。
概念的には、クエリ オプティマイザーが適切な実行プランを見つけようとしていることは理解していますが、この場合、ひどい仕事をしているように見えます。DBMS にネストされたクエリを最初に実行させる方法はありますか? おそらくヒントを使用して?
ありがとう