2010-04-08 2 views
7

Я только начинаю исследовать оптимизацию для моей базы данных MySQL. Из того, что я читаю, индексирование кажется хорошей идеей - поэтому я хочу создать индекс на одном из моих столбцов VARCHAR, на столе, используя движок MyISAM.Размеры индекса в MySQL

Из того, что я читаю, я понимаю, что индекс ограничен размером в 1000 байт. А символ VARCHAR имеет размер 3 байта. Означает ли это, что если я хочу индексировать столбец VARCHAR с 50 строками, мне нужен префикс индекса из 6 символов? (1000 байт/50 строк/3 байта на символ = 6.66)

Если это так, это кажется немного усложненным - вот почему я ставил под сомнение мое понимание. Кажется довольно странным, что вы могли бы индексировать 333 строки в столбце VARCHAR, используя префикс из 1 символа.

Я что-то упустил?

ответ

4

Из того, что я читал, я понимаю, что индекс ограничен размером 1000 байт.

Индекс ключа длина ограничена 1000 байтов в MyISAM, 767 байт в InnoDB (в колонке).

Это означает, что вы можете не индексировать один UTF8 колонка длиной более 333 символов в MyISAM таблице (при расчете максимального размера индекса, MySQL предполагает 3 байт на символ, хотя фактическая длина может быть значительно меньше)

Вы можете создать столько индексированных записей, сколько вам нужно.

+0

О, поэтому ограничение 1000 байтов применяется только к имени столбца? – Tommy

+2

@Tommy: оно применяется к максимальному количеству символов, которые вы можете сохранить в индексированном столбце одной записи. – Quassnoi

+0

Спасибо, это немного разъясняет. Поэтому каждая запись в столбце, который я хочу индексировать, может содержать 333 символа. В чем причина использования индексного префикса с менее чем 333 символами? В примере в ссылке mysql используется префикс из 10 символов. – Tommy

0

Я думаю, что это означало ширину варчара. Если максимальный размер индекса составляет 1000 байт, а varchar - 3 байта, то максимальный индексный размер будет 1000/3.

Смежные вопросы