SDO_JOIN は、多くの空間オブジェクトを他の多くのオブジェクトと照合するように設計されています。これは「バッチ」操作であるため、時間がかかります。照合する必要があるオブジェクトが多ければ多いほど、明らかに時間がかかります。かかる時間は、実行するハードウェアの種類にも明らかに依存します. CPU 能力が重要です。
クエリについては、SDO_GEOM.RELATE 呼び出しを削除することから始めます。これは、メインの SDO_JOIN クエリによって既に行われているため、不要です。また、これらのヒントを使用する理由もわかりません。だからこれを試してください:
SELECT w.id as id1, w2.id as id2
FROM TABLE(SDO_JOIN('nodesWays', 'SHAPE', 'nodesWays', 'SHAPE', 'mask=ANYINTERACT')) c,
nodesWays w, nodesWays w2
WHERE c.rowid1 = w.rowid
AND c.rowid2 = w2.rowid
and c.rowid1 < c.rowid2;
これにはどのくらいかかりますか?
90秒でいいですか?50秒でいいですか?紐の長さは?
本当の問題は、90 秒と 50 秒のどちらがアプリケーション ワークフローに適しているかということです。ビジネス要件を満たしていますか? もしそうなら、あなたはすべて設定されています。より速く結果が必要な場合は、より多くの CPU パワー (より高速なプロセッサ) を備えたシステムで実行してみてください。
SDO_JOIN は現在、マルチコア/マルチ CPU サーバーによって提供される並列処理を利用していないことに注意してください。並列処理を引き続き使用できますが、クエリを書き直す必要があり、構文がより複雑になります。次に、もう一度自問自答してください: 応答を速くするために努力する価値はありますか?