問題のテーブルが 3 つあります。
`eng` with column english
`jap` with column japanese
`eng-jap` with column eng and column jap
eng.english は独自の英文、jap.japanese は独自の日本語文、eng-jap は jap からの日本語と eng からの英語を含む翻訳です。
この質問の最後に、テーブルの詳細を貼り付けました。
私の質問: なぜ...
このクエリは非常に高速に動作します。
SELECT * FROM eng WHERE english IN (SELECT eng FROM `eng-jap`);
これには100秒またはタイムアウトがかかります:
SELECT * FROM jap WHERE japanese IN (SELECT jap FROM `eng-jap`);
(この 2 番目のクエリに関する奇妙な注意点は、phpmyadmin で実行すると、「終了した場合」が終了するまでに 100 秒かかり、「終了した場合」は 0.024 秒かかったと言うということです。100 秒間ロードされましたが、私の Web サイトでも100 秒またはタイムアウト)
以下のデータからわかるように、これら 3 つのテーブルはすべて、ほぼ同じ数の行を持っています。eng テーブルと jap テーブルは特に似ています。
問題はテーブル設定またはインデックスなどのどこかにあると思われるので、関連するすべての詳細を今すぐ貼り付けます。
JAP TABLE:
Keyname Type Unique Packed Column Cardinality Collation
PRIMARY BTREE Yes No ID 130296 A
full BTREE Yes No japanese 130296 A
Format dynamic
Collation utf8_general_ci
Rows 130,296
Row length ø 264
Row size ø 372 B
Next Autoindex 131,790
Type Usage
Data 33,718.6 KiB
Index 13,652.0 KiB
Total 47,370.6 KiB
ENG TABLE:
Keyname Type Unique Packed Column Cardinality Collation
PRIMARY BTREE Yes No ID 129637 A
full BTREE Yes No english 129637 A
Format dynamic
Collation utf8_general_ci
Rows 129,637
Row length ø 101
Row size ø 181 B
Next Autoindex 130,749
Data 12,899.3 KiB
Index 10,068.0 KiB
Total 22,967.3 KiB
ENG_JAP TABLE:
Keyname Type Unique Packed Column Cardinality Collation
PRIMARY BTREE Yes No ID 139442 A
eng BTREE Yes No eng (150) 0 A
jap (150) 139442 A
Format dynamic
Collation utf8_general_ci
Rows 139,442
Row length ø 315
Row size ø 468 B
Next Autoindex 140,951
Data 42,945.5 KiB
Index 20,816.0 KiB
Total 63,761.5 KiB