でWITH句で複数の副選択を最適化します。は、私のようなクエリが持っているオラクル
私は WITH句を使用して、一度prs
テーブルを照会することができるのだろうか?どのようにしてクエリを書くことができますか?
各テーブルには何百万というレコードがあるため、それらを結合するとクエリが非常に遅くなることに言及します。
でWITH句で複数の副選択を最適化します。は、私のようなクエリが持っているオラクル
私は WITH句を使用して、一度prs
テーブルを照会することができるのだろうか?どのようにしてクエリを書くことができますか?
各テーブルには何百万というレコードがあるため、それらを結合するとクエリが非常に遅くなることに言及します。
あなたのクエリはこのように書き句で使用して:
with abc as (select id,
display_name ,
address ,
tel
from prs)
select
qsn.code,
abc.display_name,
abc.address,
abc.tel
from qsn
inner join abc
on qsn.fk_prs = abc.id
where qsn.register_date between :x1 and :x2 ;
PS:テストされていません。
使用参加:
select qsn.code, prs.display_name, prs.address, prs.tel
from qsn
left join prs on prs.id = qsn.fk_prs
where qsn.register_date between :x1 and :x2
私がそれらに参加するときに言及したように、クエリの実行時間は悪化します! –
@AmirPashazadeh - 'prs.id'だけでなく、' qsn.fk_prs'にインデックスがありますか?あなたがしない場合は、それを追加し、それが役立つかどうかを確認してください。 – mathguy
はいインデックスはありますが、 'id'、' display_name'、 'address'、' tel'の組み合わせのインデックスはありません。私は常にANSI JOINSを使用しますが、問合せコストは(説明プランを使用して41000から64000に増加します) –
あなたの実行計画を見ることなく、野生の推測だけが可能です。両方のクエリについて[実行計画](http://stackoverflow.com/questions/34975406/how-to-describe-performance-issue-in-relational-database?answertab=active#tab-top)を送信してください(サブクエリと結合して)。あなたの観察の1つの説明は、(両方のテーブルで可能なFTSを使用して)ハッシュ結合に切り替えるということです。もう1つの説明は、スカラーサブクエリのキャッシングから得られる利益です(qsn.fk_prsの数が比較的少ない場合)。 –