Как innodb узнает, является ли страница листовой или не листовой? - PullRequest
0 голосов
/ 23 октября 2018

Я читал внутренности mysql в течение нескольких недель, и проблема всегда меня озадачивала

. Мы все знаем, что листовая страница действует как индекс в структуре данных дерева B + и

реальные данные, хранящиеся на неконечной странице. Но как я могу узнать, какая из них является

листовой страницей или листовой страницей?кто-нибудь, пожалуйста, просветите меня? tks.

1 Ответ

0 голосов
/ 24 октября 2018

В заголовке страницы есть поле PAGE_LEVEL.Если он равен нулю, это листовая страница.

https://github.com/twindb/undrop-for-innodb/blob/master/c_parser.c#L657

int leaf_page = mach_read_from_2(page + PAGE_HEADER + PAGE_LEVEL) == 0;

Все мы знаем, что листовая страница действует как индекс в структуре данных дерева B + и реальных данных, хранящихся нане листовая страница.

Это предложение не имеет смысла.Можно сказать, что таблица хранится в индексе с именем PRIMARY или (GEN_CLUSTER_INDEX, если в качестве основного индекса используется уникальный индекс).ПЕРВИЧНЫЙ индекс - это дерево B +.Ключ индекса - это поля первичного ключа.На неконечных страницах ключ является ключом, значение - идентификатором страницы ниже.На листовых страницах ключ снова является ключом, но значением являются остальные поля таблицы.

Вторичный индекс также является деревом B +.Ключ индекса - это поля вторичного ключа, а значение - первичный ключ записей.

...