0

私は単純な作業をしているmysql MyISAMテーブルを持っていますselect id from mytable limit 1;。これはシステムをフリーズさせるだけです。

やってみexplain select id from mytable limit 1;ました。再びシステムがフリーズします。テーブルの人口統計: 50,000 レコード、10 mbs サイズ、2 つのインデックス (主キーの自動インクリメント)、8 列。

explainクエリプランを表示するはずなので、ステートメントが失敗した理由はわかりません。テーブルのサイズもレコードの数も膨大ではないのに、なぜ mysql の動作が遅いのでしょうか? むしろ、ここで何が欠けているのでしょうか?

4

1 に答える 1

0

It was due a waiting state on mytable. eggyal gave me the clue to use show processlist. It showed:

+-----+---------+-----------------+----------------+---------+------+---------------------------------+----------------------------------------------------+
| Id  | User    | Host            | db             | Command | Time | State                           | Info                                               |
+-----+---------+-----------------+----------------+---------+------+---------------------------------+----------------------------------------------------+
| 349 | root    | localhost:56612 | mydb           | Query   | 3582 | Waiting for table metadata lock | ALTER TABLE `mytable` ADD INDEX(`fk_to_02`) |

I planted a kill 349 to terminate that wait chain, and now the explain statement works as expected.

于 2012-06-10T06:18:54.817 に答える