このリクエストが遅くなる理由を知っていますか (それ以外の場合は高速な MySQL サーバーで 1.7 秒):
SELECT DISTINCT TABLE_A.keyA
FROM TABLE_A,TABLE_B
WHERE TABLE_A.keyB= TABLE_B.keyB
AND TABLE_A.fieldC in (0,2,5,7,8) LIMIT 20;
によって与えられたこの実行計画ではEXPLAIN
:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE TABLE_B index PRIMARY PRIMARY 8 NULL 10 Using index; Using temporary
1 SIMPLE TABLE_A ref IDX_TABLE_A_KEY_B IDX_TABLE_A_KEY_B 8 TABLE_B.keyB 25455 Using where
その他の要素 :
- テーブル TABLE_A には 300 000 行あります
- TABLE_A.keyA は TABLE_A の主キーです
- TABLE_A.keyB は、 TABLE_B の主キー keyB に対する外部キーです。テーブル TABLE_B には 10 行あります。
- TABLE_A の 99 % には fieldC=1 があり、テーブルの 1 % には fieldC が (0,2,5,7,8) にあります (このため、このフィールドはインデックス化されていません。EDIT この句は問題ではありません。節ですが、TABLE_B との結合は高速です) ;
- テーブルでの単純な SELECT は高速であるため、有罪なのは JOIN であるように私には思えます。
- 別のテーブル TABLE_C との結合も非常に低速です。
- MySQL バージョン: 5.1.23a-maria-alpha
何か考えはありますか?