0

最近、これらのテーブルに多くの行を挿入したところ、クエリがタイムアウトになりました:

SELECT * FROM eng
WHERE english IN (SELECT eng FROM `eng-jap`)
ORDER BY lastmodified DESC

テーブル eng-jap には約 25,000 行あります。ここにいくつかの統計があります。

Format          dynamic
Collation       utf8_general_ci
Rows            24,960
Row length ø    316
Row size ø      328 B
Next Autoindex  26,468
Type    Usage
Data    7,724.0 KiB
Index   264.0 KiB
Total   7,988.0 KiB

テーブル eng の場合:

Format          dynamic
Collation       utf8_general_ci
Rows            23,691
Row length ø    105
Row size ø      117 B
Next Autoindex  24,771
Type    Usage
Data    2,451.4 KiB
Index   260.0 KiB
Total   2,711.4 KiB

いずれかのテーブルに対して * from table gets (クエリは 0.0002 秒かかりました) を選択するだけです

このような非常に単純なサブクエリで、各テーブルに数個の k があり、設定した 160 秒以上のタイムアウトが必要で、タイムアウトになるとは信じられません...

テーブルの設定が原因であることを願っています。またはmysqlは本当にこのようなクエリを実行できませんか?

4

1 に答える 1

1

あるテーブルのすべての要素を他のテーブルのすべての要素と相互参照する必要があります。

おそらく、これはうまくいくかもしれません:

SELECT `eng`.* FROM `eng`
JOIN `eng-jap` ON `eng`.`english` = `eng-jap`.`eng`
ORDER BY `eng`.`lastmodified` DESC

また、適切なインデックスが定義されていることを確認してください。これにより、クエリの速度が向上します。

于 2012-11-12T01:15:34.817 に答える