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

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;

第一个即使几个小时也跑不完,而第二个则顺利完成。唯一的区别是两个查询之间的 type_id。

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

预先感谢您的帮助 - 我有一项紧急的数据工作要完成,这个问题让我发疯

有帮助吗?

解决方案

好像你没有上(TYPE_ID,的updated_at)的索引和表是相当大的。

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

CREATE INDEX type_updated_idx ON table (type_id, updated_at);

假设,你有足够的权限来使数据定义语句。

其他提示

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

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

一个柱不能被锁定 - 但索引范围即可。 Show innodb status通常将告诉你在此之后活性交易你正在等待。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top