MySql: Если я установил формат двоичного журнала на строку, буфер изменения дозы все еще действителен? - PullRequest
0 голосов
/ 07 августа 2020

Когда я использую binlog «satement» и неуникальный индекс, mysql будет использовать «буфер изменений», избегая чтения с диска. Но если установить формат binlog на "row", binlog потребуются все столбцы в строке, поэтому mysql должен считываться с диска. Итак, в этом случае доза "change buffer" недействительна?

1 Ответ

1 голос
/ 10 августа 2020

На основе mysql do c:

Буфер изменений - это специальная структура данных, которая кэширует изменения на страницах вторичного индекса , когда эти страницы не находятся в пуле буферов. Буферизованные изменения, которые могут быть результатом операций INSERT, UPDATE или DELETE (DML), объединяются позже, когда страницы загружаются в пул буферов другими операциями чтения.

Этот do c очень ясно дал понять, что change buffer может использоваться для non-unique secondary index.

Вернуться к двоичному журналу формата строки, это не повлияет на change buffer. Поскольку для insert, update и delete, хотя binlog нужны все столбцы в строке, эти данные могут быть получены из индекса кластера, и все неуникальные индексы по-прежнему могут получить выгоду от change buffer.

Реализация :

change buffer используется, чтобы избежать слишком большого количества случайных операций чтения с диска. redo log используется, чтобы избежать слишком большого количества случайных операций записи на диск.

...