我在 Innodb 表中的 SELECT 遇到了一个奇怪的问题,它永远不会返回,我等了两个多小时才看到结果,但没有,还在等待。
CREATE TABLE `example` (
`id` int(11) NOT NULL,
`done` tinyint(2) NOT NULL DEFAULT '0',
`agent` tinyint(4) NOT NULL DEFAULT '0',
`text` varchar(256) NOT NULL,
PRIMARY KEY (`id`),
KEY `da_idx` (`done`,`agent`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
我无法获得结果的查询是:
SELECT id, text FROM example WHERE done = 0 AND agent = 0 LIMIT 120;
首先我想到了一些索引优化或锁定问题,我花了一些时间研究,但后来我发现了这个:
SELECT id FROM example WHERE done = 0 AND agent = 0 LIMIT 120;
...
...
...
120 rows in set (0.27 sec)
SELECT text FROM example WHERE done = 0 AND agent = 0 LIMIT 120;
...
...
...
120 rows in set (0.83 sec)
现在我迷路了,如何使用完全相同的查询(相同的 WHERE 和 LIMIT)分别获取 id 或 text 列可以完美地工作,然后不能同时获得它们?
之后再次执行“SELECT id, text...”,两次查询效果相同,永不返回。
任何帮助表示赞赏,Innodb 大师可以提供帮助;)
补充信息:看起来不像事务锁问题,看下一个查询的响应时间呈指数增长:
SELECT id, text FROM example WHERE done = 0 AND agent = 0 limit 109;
...
109 rows in set (0.31 sec)
SELECT id, text FROM example WHERE done = 0 AND agent = 0 limit 110;
...
110 rows in set (3.98 sec)
SELECT id, text FROM example WHERE done = 0 AND agent = 0 limit 111;
...
111 rows in set (4 min 5.00 sec)