Условие SELECT FOR UPDATE и WHERE для двух проиндексированных столбцов - что такое стратегия блокировки? - PullRequest
3 голосов
/ 21 апреля 2011

Этот вопрос является логическим продолжением этого вопроса:

Сколько строк будет заблокировано командой SELECT ... ORDER BY xxx LIMIT 1 FOR UPDATE?

Предположим, у меня есть такой SELECT:

SELECT id, status FROM job WHERE status = XXX AND id IN (1, 2, 3) FOR UPDATE

id - это первичный ключ, статус индексируется.

Какова стратегия блокировки MySQL в этом случае?

  1. Блокировка строк, соответствующих только обоим условиям
  2. Блокировка всех строк, соответствующих первому условию + блокировка всех строк, соответствующих второму условию, отдельно
  3. Блокировка всей таблицы

Я думаю, что наиболее логичным является 2. Но ... я не уверен. Можете ли вы уточнить?

1 Ответ

1 голос
/ 22 апреля 2011

Ну, я сделал тесты, и они показывают, что в этом случае действует вариант 1.

Блокировка строк, соответствующих только обоим условиям

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...