Innodb テーブルの SELECT で奇妙な問題が発生しました。返されません。結果が得られるかどうかを確認するために 2 時間以上待ちましたが、まだ待っています。
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)
今、私は迷っています.idまたはtext列をまったく同じクエリ(同じWHEREとLIMIT)で個別に取得する方法が完璧に機能し、それらの両方を取得できないのですか??
その後、「SELECT id、text ...」を再度実行すると、2 つのクエリが同じ結果になり、戻りません。
どんな助けでも大歓迎です、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)