2012-06-10 55 views
0

我有我在做一个简单的select id from mytable limit 1; mysql的MyISAM表。这只会冻结系统。我试过explain select id from mytable limit 1;。它再次冻结我的系统。表人口统计:50k记录,10 mbs大小,2个索引(主键自动增量),8列。mysql索引不优化查询

我很笨,为什么explain语句失败,因为它应该显示查询计划,没有别的。表的大小和记录的数量都不是很大,那为什么mysql工作得这么慢呢?相反,我在这里错过了什么?

+1

另一方面:你的查询应该做什么?如果没有'ORDER BY'子句,结果将是不确定的...... – eggyal

+0

@eggyal让我们通过id desc命令。但是这个查询也冻结了。我有另一个表格只有100个记录,它的工作原理。 – jerrymouse

+1

当一个连接正在运行这样一个冻结的查询时,另一个连接在'SHOW PROCESSLIST'下显示的连接是什么? – eggyal

回答

0

这是因为mytable的等待状态。 eggyal给了我使用show processlist的线索。这表明:

+-----+---------+-----------------+----------------+---------+------+---------------------------------+----------------------------------------------------+ 
| 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`) | 

我种植了kill 349终止在等待链,现在EXPLAIN语句按预期工作。