0

SDO_JOIN-Operator を使用して、テーブルを selfJoin したいと考えています。テーブルには次の構造があります: ID VARCHAR2(20)
SHAPE SDO_GEOMETRY()

テーブルには 25778 行あります。

次の SDO_JOIN ステートメントには 90 秒かかります。

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;

90 秒は通常の時間ですか、それとも高すぎますか。実行に適したタイミングがわかりません。

さようなら、アンドレ

4

2 に答える 2

0

あなたが投稿した説明計画を考えると、より高速な CPU を備えたより優れたハードウェアで実行しない限り、おそらくこれ以上高速に実行するのに苦労することになると思います。SPATIAL_VECTOR_ACCELERATION=TRUE を使用すると、12c で sdo_join がはるかに高速になることに注意してください。そのため、可能であれば、そのリリースで実行してみてください。

于 2014-06-11T20:39:17.670 に答える
0

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 サーバーによって提供される並列処理を利用していないことに注意してください。並列処理を引き続き使用できますが、クエリを書き直す必要があり、構文がより複雑になります。次に、もう一度自問自答してください: 応答を速くするために努力する価値はありますか?

于 2014-06-06T16:25:13.427 に答える