MySQL min () поведение в Innodb - PullRequest
       39

MySQL min () поведение в Innodb

0 голосов
/ 25 февраля 2019

Как ведет себя MySQL, когда вы выполняете SELECT MIN(x) FROM blah;, когда в то же время в таблице выполняются тысячи DELETE операций?

Будет ли результат min () когда-либо отображатьзапись, которая была удалена?Если нет, как это предотвращает возврат значения из удаленной записи?

Это происходит потому, что у нас есть большая база данных, в которой min () работает в течение нескольких часов, но удаления происходят непрерывно в течение этого времени.

1 Ответ

0 голосов
/ 04 марта 2019

Чтение https://dev.mysql.com/doc/refman/8.0/en/innodb-consistent-read.html о последовательных чтениях в InnoDB.Каждый оператор SELECT гарантирует просмотр своего рода «снимка» данных, который не изменится, пока выполняется оператор SELECT.

Так что вы правы, у вас есть риск возврата оператора SELECTзначение для MIN(x), которого не будет после того, как ваш оператор SELECT будет выполнен, поскольку он был удален за это время.

Это цена, которую мы платим за свободу выполнять запросы на чтение без блокировки одновременных обновлений /удаляет.

Кстати, если вы хотите, чтобы MIN(x) быстро возвращался, создайте индекс с x в качестве первого столбца.

...