おもしろかったのでメモ。 CREATE TABLE `tbl` ( `id` BIGINT UNSIGNED NOT NULL, `done` BOOLEAN NOT NULL DEFAULT FALSE, PRIMARY KEY (`id`), KEY `done_and_id` (`done`, `id`) ); tbl テーブルに done = FALSE で100万行INSERTしておく SELECT id FROM tbl WHERE done = FALSE ORDER BY id ASC LIMIT 50 でidを順に集める 処理する UPDATE tbl SET done = TRUE WHERE id IN (...) で処理済にする これを done = FALSE な行がなくなるまで繰り返す KEY `done_and_id (`done`, `id`) ありでEXP
![MySQLのEXPLAINが直感とは異なっていた事例 - 私が歌川です](https://cdn-ak-scissors.b.st-hatena.com/image/square/82f2f22bff6c94e347b03d5a172543416ee8db63/height=288;version=1;width=512/https%3A%2F%2Fcdn-ak.f.st-hatena.com%2Fimages%2Ffotolife%2Fu%2Futgwkk%2F20201023%2F20201023205014.png)