@kirill-93

Как считается длина ключа в Explain mysql?

Есть ключ, который состоит из 5 полей:
created_at (timestamp),
post_type (varchar 255),
is_duplicate (tinyint 1),
deleted (tinyint 1),
entity_id (int)

На сколько я понял, поле key_len в explain показывает длину ключа, которая используется в запросе, а длина считается по типу поля у ключе.
То есть у меня:
timestamp - 4 байта
varchar - по количеству символов + 1. В этом поле у меня может быть одна из шести строк, длина каждой 4-6 символов
is_duplicate - 1 байт
deleted - 1 байт
entity_id = 4 байта

В запросе explain я получаю key_len 779. Что это значит? Как считается?

stackoverflow.com/questions/7643491/understanding-...
Вот тут написано и расписано, как считается длина в байтах, но 779 у меня никак не выходит!
  • Вопрос задан
  • 152 просмотра
Решения вопроса 1
Melkij
@Melkij
PostgreSQL DBA
Давайте считать:
timestamp - 4 байта
tinyint по 1 байту
int - 4 байта
varchar(255) - где 255 длина в символах. В байтах будет больше. Например, для utf8, потребуется 255*3+2 байта. 767 байт. Для utf8mb4 - 255*4+2
Итого строка индекса занимает 4 + 767 + 1 + 1 + 4 = 777 байт. Немного не хватает, может быть у вас какие-то из полей могут быть NULL?

Да, если вы не знали, в индексе и в памяти (например, при сортировке) varchar всегда развёрнут до максимальной длины.
Если возможные строки у вас фиксированы - используйте enum. 1 или 2 байта места для записи. И уж определённо не 255, если у вас строки в 4-6 символов.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы