0

かなり大きなクエリがあります。

パフォーマンスは常に合理的に許容できるものでしたが、現在、この問題が発生しています。

もちろん、エイリアスを使用してテーブルに複数回参加する必要がありますが、そうするとパフォーマンスが大幅に低下します。

膨大なクエリなので、すべてを投稿することはできませんが、要点は次のとおりです。

SELECT table1.name,
       ALIAS1.CODE AS "Sequence"
...
FROM table1
...
LEFT JOIN table2 ALIAS1
ON ALIAS1.COLUMN1 = table1.key1
AND ALIAS1.COLUMN2 = 'aaba'
AND ALIAS1.COLUMN3 = '00001'
...

これは問題なく、約 90 秒で実行されます。しかし、次のように同じテーブルを再度追加すると、実行時間は指数関数的に増加します (これまでのところ 2 時間で、まだ実行中です)。

SELECT table1.name,
       ALIAS1.CODE AS "Sequence",
       ALIAS2.CODE AS "Rating"
...
FROM table1
...
LEFT JOIN table2 ALIAS1
ON ALIAS1.COLUMN1 = table1.key1
AND ALIAS1.COLUMN2 = 'aaba'
AND ALIAS1.COLUMN3 = '00001'

LEFT JOIN table2 ALIAS2
ON ALIAS2.COLUMN1 = table1.key1
AND ALIAS2.COLUMN2 = 'ffhr'
AND ALIAS2.COLUMN3 = '00107'

私が知る必要があるのは、これを引き起こしている可能性のある要因は何ですか?

インデックスは問題ないように見えます。そうしないと、最初の結合が問題になります。

2 番目の結合がそのような問題になるのはなぜですか?

私は実際には同じテーブルに 3 回参加する必要がありますが、現状ではこれは当然のことです。

4

1 に答える 1

0
ON ALIAS1.COLUMN1 = table1.key1
AND ALIAS1.COLUMN2 = 'aaba'
AND ALIAS1.COLUMN3 = '00001'

3つの列を同時に結合する場合は、3つの列すべてを含む複数列のインデックスが必要です。

おそらく、定数値で結合する代わりに、それらのフィルターをWHERE句に入れることができます。

于 2012-10-26T15:15:17.697 に答える