-1

クエリを入力すると:

SELECT A.T1, B.T2, from A, B where A.T3 = B.T3 and A.T4 = B.T4

mysql がハングします。ただし、制約の 1 つを取り除くと、次のようになります。

SELECT A.T1, B.T2, from A, B where A.T3 = B.T3

mysql はほとんどすぐに結果を返します。どうしてこれなの?

4

2 に答える 2

1

あなたはこれを非常に遅く非効率的な方法で行っています。AND 句自体とは関係ありませんが、テーブルの設計方法とクエリの実行方法が関係しています。

次の行に沿って何かを試してください。

SELECT A.T1, B.T2
FROM A
JOIN B ON B.T3 = A.T3 AND A.T4 = B.T4 

また、パフォーマンスをさらに向上させるには、列が最も多いテーブルを JOIN ではなく FROM 句に配置します。

また、テーブルのセットが非常に大きいため、インデックスを作成することを検討する必要があります。

CREATE INDEX index_name
ON A (T4)
GO
CREATE INDEX index_name2
ON B (T4)
GO

インデックスを作成する必要があるのは 1 回だけです。クエリを実行するたびにこれを行う必要はありません。 通常、インデックスを作成したら、それについて再度心配する必要はありません。

インデックス作成の詳細: http://en.wikipedia.org/wiki/Database_index

于 2012-06-01T21:32:38.193 に答える
0

ほとんどの場合、これは制約自体には関係なく、制約とインデックスの関係に関係しています。テーブルに定義されたインデックスに関する WHERE 句を見てください。WHERE 句の順序によっても違いが生じることがあります。
可能であれば、SQL-1 型の JOIN から離れて、より見やすく柔軟な SQL-2 型に移行してみてください。マッドバーンの答えを見てください。

于 2012-06-01T21:42:47.090 に答える