4つのテーブルで3つのテーブル結合を行うMySQLクエリを使用しています。これらの結合のうちの2つは、MULキーのペアにあります。3番目の結合は、主キーのペアで行われます。クエリは100行を取得するのに1分かかります。
MULキーの両方のペアは一意であると思います。したがって、これらのキーが一意としてインデックス付けされるか、外部キーにされる場合、パフォーマンスが大幅に向上することに気付くでしょうか。
MULキーの結合は、ここでの原因である可能性がありますか?
編集
さて、これがスキーマです。実際のテーブル/列名を文字に置き換えました。
mysql>記述テーブルA; + ------------------- + ------------------ + ------ + --- -+ --------- + ---------------- + | フィールド| タイプ| ヌル| キー| デフォルト| エクストラ| + ------------------- + ------------------ + ------ + --- -+ --------- + ---------------- + | pkey | int(10)unsigned | いいえ| PRI | NULL | auto_increment | | mkey | int(10)unsigned | いいえ| MUL | NULL | | | a | int(10)unsigned | いいえ| | NULL | | | b | int(10)unsigned | いいえ| | NULL | |
mysql>記述テーブルB; + ------------------- + ------------------ + ------ + --- -+ --------- + ---------------- + | フィールド| タイプ| ヌル| キー| デフォルト| エクストラ| + ------------------- + ------------------ + ------ + --- -+ --------- + ---------------- + | pkey | int(10)unsigned | いいえ| PRI | NULL | auto_increment | | mkey1 | int(10)unsigned | いいえ| MUL | NULL | | | mkey2 | int(10)unsigned | いいえ| MUL | NULL | | | a | int(10)unsigned | いいえ| | NULL | | | b | int(10)unsigned | いいえ| | NULL | | | c | int(10)unsigned | いいえ| | NULL | |
mysql>記述テーブルC; + --------------- + ------------------ + ------ + ----- +- -------- + ------- + | フィールド| タイプ| ヌル| キー| デフォルト| エクストラ| + --------------- + ------------------ + ------ + ----- +- -------- + ------- + | pkey | int(10)unsigned | いいえ| PRI | NULL | | | mkey | varchar(128)| いいえ| MUL | NULL | |
mysql>記述テーブルD; + --------------- + ------------------ + ------ + ----- +- -------- + ------- + | フィールド| タイプ| ヌル| キー| デフォルト| エクストラ| + --------------- + ------------------ + ------ + ----- +- -------- + ------- + | pkey | int(10)unsigned | いいえ| PRI | NULL | | | mkey | varchar(128)| いいえ| MUL | NULL | |
クエリ:
select
A.a, A.b, B.c, A.mkey, C.pkey, D.mkey
from
A, B, C, D
where
A.pkey=C.pkey and
A.mkey=B.mkey1 and
B.mkey2=D.pkey and
B.a <= A.a and
B.b >= A.b
D.mkey in ('str1', 'str2', ...);
77行を返します。