1

我知道这听起来很奇怪,但显然我的一个专栏被锁定了。

select * from table where type_id = 1 and updated_at < '2010-03-14' limit 1;

select * from table where type_id = 3 and updated_at < '2010-03-14' limit 10;

第一个即使在几个小时内也不会完成运行,而第二个则顺利完成。唯一的区别是 2 个查询之间的 type_id。

一些背景知识,第一个语句搞砸了,在此之前我不得不手动杀死。

4

3 回答 3

0

您是否尝试过ANALYZE TABLE在受影响的表上运行?

您可能需要考虑转换为 MyISAM 表,因为 InnoDB 表存在问题和限制。

于 2010-05-17T02:08:45.080 回答
0

不能锁定列 - 但可以锁定索引范围。Show innodb status通常会告诉您在等待哪个活动交易之后。

于 2010-05-17T03:15:37.627 回答
0

似乎您在 (type_id, updated_at) 上没有索引,而且您的表相当大。

创建索引应该可以解决问题:

CREATE INDEX type_updated_idx ON table (type_id, updated_at);

假设您有足够的权限来进行数据定义语句。

于 2010-05-17T17:24:23.027 回答