2017-02-02 9 views
1

Я читал различные форумы и делал стек над потоками, но не смог найти ответ.InnoDB -> Количество ключей для Int vs VarChar

Я пытаюсь выяснить количество ключей, которые будут сохранены на странице базы данных 16KB InnoDb.

Как вы можете видеть в this forum, они упомянули, как рассчитать количество ключей для MyISAM на одной странице. Я хотел бы сделать то же самое для InnoDb. Я не понимаю, как были сделаны эти расчеты.

Im сравнение int, которое составляет 4 КБ и VARCHAR (200). Было бы здорово, если бы я мог получить этот расчет.

ответ

0
  • Индекс структурирован как Брит.
  • InnoDB BTrees изначально заполнены только 15/16-й полной.
  • После большого количества оттока, среднее значение в среднем составляет 69%.
  • Существует значительная сумма накладных расходов для каждой строки в записи индекса.
  • PRIMARY KEY (in InnoDB) «сгруппирован» с данными. Таким образом, только нелистовые узлы принимают дополнительные блоки.
  • Вторичные индексы содержат все столбцы (столбцы) PRIMARY KEY; вот как они «указывают» на запись.
  • Основываясь на вышеуказанных двух пунктах, не имеет смысла иметь только INT в BTree для индекса.

Я использую простое правило большого пальца: 100 «рядов» на каждый бит.
Следствие: миллионный ряд бит составляет около 3 уровней; таблица с миллиардными рядами составляет около 5 уровней.

Давайте так:

CREATE TABLE x (
    id INT ..., 
    num INT ..., 
    str VARCHAR(200) CHARACTER SET utf8, 
    PRIMARY KEY (id), 
    INDEX i_num (num), 
    INDEX i_str (str) 
) ENGINE=InnoDB; 

Для i_num, обратите внимание, что есть два INTs. Вы можете получить 300-400 строк на блок. 10 миллионов строк занимают 3 уровня.

Для i_str предположим, что в среднем 100 корейских символов - это 300 байт для текста. Вы можете получить 25-35 строк на блок. Строки 10М занимают 5 уровней.

ALTER и OPTIMIZE май или не может индексы дефрагментации.

Есть information_schema столы, которые дают некоторые подробно о каждом Брит и его уровнях. Percona и MySQL имеют разные таблицы для таких.

Нижняя строка: вычисления слишком размыты, чтобы быть точным. Надеюсь, мои ручные манеры дали вам несколько лучших ручек.