2

状況は、10 を超える異なるテーブルに参加する必要があることです。SQL では、同じテーブルに 5 回参加しています。クエリは次のようになります。

select * from 
Tab1
join Tab2 on Tab1.x = Tab2.x
.
.
.
join Tab10 t10 on
t10.x = 'xx' and 
t10.y = 'yy' and
t10.z = 'zz' 

join Tab10 t11 on
t11.x = 'aa' and 
t11.y = 'bb' and
t11.z = 'cc' 

join Tab10 t12 on
t12.x = 'dd' and 
t12.y = 'ee' and
t12.z = 'ff' 

join Tab10 t13 on
t13.x = 'gg' and 
t13.y = 'hh' and
t13.z = 'ii' 

join Tab10 t14 on
t14.x = 'jj' and 
t14.y = 'kk' and
t14.z = 'll' 

この Tab10 が 5 回結合されている理由は、パラメーターに基づいて異なる値を取得するためです。Tab10 結合をより良い方法で書き直すことは可能ですか? また、このTab10の参加により、パフォーマンスが悪いことに気付きました。

4

3 に答える 3

1

5回参加する必要はなく、or代わりに使用してください。

.
.
.
join Tab10 t10 on 
(t10.x = 'xx' and t10.y = 'yy' and t10.z = 'zz') or  
(t10.x = 'aa' and t10.y = 'bb' and t10.z = 'cc') or 
(t10.x = 'dd' and t10.y = 'ee' and t10.z = 'ff') or ...
于 2011-10-14T07:49:53.557 に答える
0

参加数が少ないからといって、パフォーマンスが悪いとは限りません。結合で使用する3つのフィールドを使用して、Tab10テーブルのインデックスを作成します。

を使用しないでくださいselect *。パフォーマンスが低下します。使用しない大量のデータをフェッチすることになります。

于 2011-10-14T07:35:30.043 に答える
0

覚えておくべきことの 1つよりsubselectも効率的な場合があります。グッファが言ったように、インデックスを追加することは良い点です。ただし、読み取りよりもはるかに多くのインデックスをテーブルに追加すると、そのテーブルで速度が低下する可能性があることに注意してください。left outer joinwherewritesupdates/insert

于 2011-10-14T07:41:40.117 に答える