Почему MySQL использует только часть индекса?
Все очень просто:UPDATE `test` USE INDEX (`time`) SET `lock` = 123456 WHERE `lock` = 0 ORDER BY `time` LIMIT 1000
Затронуто 1000 строк. (Запрос занял 0.0736 сек.)
Всем спасибо!
Четыре раза перечитал - так и не понял, зачем вам time при айдейте поля с ID процесса на ноль. Если вы сначала делаете так:UPDATE `test` SET `lock` = 1 WHERE `lock` = 123456
то почему потом не сделать с точностью до наборот?UPDATE `test` SET `lock` = 0 WHERE `lock` = 1
Если вы скажете, что несколько процессов могут выполнять задание, и нельзя просто так проставить нули всем заданиям, у кого 1, то я вам скажу, что вам нужна нормальная структура таблицы, и стоит разделить "lock" и "process_id". Хотя конечно непонятно, зачем вам такой переход: 0 -> process_id -> 1 -> 0, сделайте 0 -> process_id -> 0, и у вас будут нормальные запросы:UPDATE `test` SET `process_id` = 123456 WHERE `process_id` = 0 ORDER BY `time` LIMIT 1000
UPDATE `test` SET `process_id` = 0 WHERE `process_id` = 123456