У меня есть запрос со следующей структурой:
SELECT ..... WHERE status = 'QUEUED' ORDER BY position ASC LIMIT 1 FOR UPDATE;
Это инструкция SELECT для одной таблицы для таблицы InnoDB. Поле позиция
(INT NOT NULL) имеет индекс на это. status имеет значение ENUM и также индексируется.
SELECT ... FOR UPDATE
страница руководства говорит, что блокирует все строки, которые он читает. Правильно ли я понял, что в этом случае будет заблокирована только одна строка? Или, скорее, он заблокирует всю таблицу?
Можно ли определить, какие строки будут заблокированы с помощью запроса EXPLAIN
? Если да - как? Объяснение запроса в пустой таблице показывает следующее:
1;'SIMPLE';'job';'index';<null>;'index_position';[34,...];<null>;1;'Using where'