Лучше вставить в конец первичного ключа InnoDB или разбросать по всему?

Каковы характеристики производительности вставки множества небольших записей от многих клиентов в таблицу InnoDB, где все вставки происходят в конце первичного ключа (например, с UUID, где первые цифры основаны на метке времени) по сравнению с разбросанными по всему первичному ключу? ключ (например, с UUID, где первые цифры не основаны на метке времени)? Является ли одно предпочтительнее другого?


person Ben Dilts    schedule 18.03.2014    source источник


Ответы (1)


Добавлять ключи в конец индекса предпочтительнее, потому что индекс не нужно переупорядочивать.

При вставке строк в середину индекса первичного ключа, поскольку фактические данные таблицы хранятся на той же странице, что и первичные ключи в InnoDB, данные страницы должны быть переупорядочены (и перемещены, если страница заполнена). MySQL оставляет место для роста на каждой странице, но некоторое изменение порядка и перемещение неизбежно.

Размер страницы в InnoDB составляет 16 КБ, поэтому, если вставленные строки маленькие, эффект будет меньше.

Добавление строк в конец индекса также требует меньше блокировок, хотя может быть больше конфликтов. Попробуйте вставить несколько строк в одну и ту же инструкцию.

Добавление также вызывает меньшую фрагментацию на диске, поэтому последовательные страницы остаются ближе друг к другу. Однако фрагментация диска не имеет большого значения, если только вы не запрашиваете большое количество последовательных строк или не выполняете сканирование таблиц вместо использования индексов.

Я бы не стал создавать добавочный суррогатный первичный ключ только для того, чтобы вы могли вставлять строки по порядку, если только ваше количество записей (вставок) не превышает количество чтений (или, возможно, потому, что ваши строки большие и вы испытываете проблемы с производительностью). Если ваши чтения выше, чем ваши записи, возможность использовать естественный первичный ключ может быть огромным преимуществом в производительности.

Добавление более эффективно, но вы должны выбрать свой метод с учетом всех факторов.

person Marcus Adams    schedule 18.03.2014