-1

次のような構造の大きなテーブル (数百万のエントリ) があります。

PASS_NUMBER
PASS_LOCATION

特定のパス (PASS_NUMBER) には、任意の数の行を含めることができます。例えば:

PASS_NUMBER     PASS_LOCATION
     1                A
     1                B
     1                D
     2                A
     2                B
     2                E
     3                A
     3                D
     3                E

PASS_LOCATIONS の特定のセット内のすべての場所で有効なパスごとに PASS_NUMBER を返す SQL クエリが必要です。例えば:

PASS_LOCATIONS {A,B} should produce PASS_NUMBERS {1,2}
PASS_LOCATIONS {A,D} should produce PASS_NUMBERS {1,3}
PASS_LOCATIONS {E} should produce PASS_NUMBERS {2,3}

PASS_LOCATIONS のセットは非常に大きく (たとえば最大 50 アイテム)、テーブルは非常に大きくなる可能性があるため (数十億行になる可能性があります)、効率が重要です。

何かご意見は?

4

2 に答える 2

1

以下が機能します。

SELECT DISTINCT PASS_NUMBER
FROM PASS_TABLE
WHERE PASS_LOCATION IN (PASS_LOCATIONS)

PASS_LOCATIONS は、場所のカンマ区切りリストです。

パフォーマンスが問題ないことを確認したい場合は、Pass_Location 列のインデックス作成を検討してください (おそらく、オプティマイザーが単一のインデックス ルックアップを実行できるように、同じインデックスで pass_number が続きます)。ただし、これは、特定のデータベースを含む多くのことに依存します。実際のデータ自体と同様に使用します。数百万行は、最新の RDBMS にとって必ずしも「大量のデータ」ではありませんが、もちろん、特定の実装と要件によって異なります。

于 2013-10-08T12:46:25.980 に答える