2

特定のユーザーがすでにトランザクション テーブルの 1 つを参照しているかどうかを確認する必要があります (約 10 個のトランザクション テーブルがあります)。既に参照されているすべてのユーザーを含む VIEW を使用することを提案しました。その後、DEV チームはそのテーブルを SELECT するだけで、探しているデータがそこにあるかどうかを確認できます。

ビューのクエリは次のとおりです。

SELECT DISTINCT user_ID
FROM transaction_table_1

UNION

SELECT DISTINCT user_ID
FROM transaction_table_2

UNION

SELECT DISTINCT user_ID
FROM transaction_table_3

UNION

SELECT DISTINCT user_ID
FROM transaction_table_4

[...]

現在は機能していますが、私の質問は、これは良い考えですか? この要件では、ストアド プロシージャではなく、スクリプト (またはビュー) のみを提供するよう求められます。各テーブルに対して簡単な IF EXIST() ステートメントを実行して、パラメータ user はどのテーブルにも存在しますが、実際には、チェックできるスクリプトのみにすることを望んでいました (変数は使用しません)。

この要件に対して最適化されたソリューションではない可能性があるため、パフォーマンスへの影響が少ない、この要件を実行するためのより良い方法についてアドバイスをいただけますか。

TIA、ロンメル

4

2 に答える 2

2

まあ、すでにそれを作っているDISTINCTので、あなたは削除することができますUNION:)

SELECT user_ID
FROM transaction_table_1

UNION

SELECT user_ID
FROM transaction_table_2

UNION

SELECT user_ID
FROM transaction_table_3

UNION

SELECT user_ID
FROM transaction_table_4

ただし、ビューを使用する必要があるため、別の方法でビューを作成する方法がわかりません。

于 2012-05-17T11:00:11.773 に答える
1

パフォーマンスの観点から、クエリを少し異なる構造にします。

SELECT DISTINCT user_ID
FROM (

    SELECT user_ID
    FROM transaction_table_1

    UNION ALL

    SELECT user_ID
    FROM transaction_table_2

    UNION ALL

    SELECT user_ID
    FROM transaction_table_3

    ...
) x

UNIONこれにより、実行する必要がある一意のインデックス スキャンの数が 1 に減少します。

于 2012-05-17T11:10:44.593 に答える