MySQL VARCHAR или CHAR для строки фиксированной длины

Если я знаю, что значение, хранящееся в MySQL, всегда будет точно 32 символа, лучше ли производительность сделать тип столбца CHAR вместо VARCHAR? В чем именно разница в производительности между использованием VARCHAR и CHAR?

спасибо.

4 ответов


Я хотел бы использовать CHAR.

если вы, вероятно, будете искать в столбце,CHAR представляет небольшое обновление производительности над VARCHAR.

поскольку ваш размер данных будет фиксированным, нет никаких недостатков в использовании CHAR, Как VARCHAR эквивалент будет хранить от одного до двух байтов в качестве префикса.

ссылки: MySQL CHAR vs VARCHAR


ответ на ваш первый вопрос: "Является ли лучшей производительностью сделать тип столбца CHAR вместо VARCHAR?"... это да. Определенно.

Если вы всегда знаете, что длина будет 32, то вы обязательно должны использовать CHAR.

несколько хороших ответов также были даны здесь: почему я должен выбирать CHAR над VARCHAR в SQL?


VARCHAR columns используйте один или два байтовых префикса для хранения длины:

в отличие от CHAR, значения VARCHAR хранятся в виде однобайтового или двухбайтового префикса длины плюс данные. Префикс length указывает количество байтов в значении. Столбец использует один байт длины, если значения требуют не более 255 байт, два байта длины, если значения могут требовать более 255 байт.

таким образом, столбец VARCHAR будет очень немного больше. Если вы знайте, что это всегда будет ровно 32 символа, тогда CHAR кажется разумным. В любом случае, когда вы не полностью уверены в длине, я бы пошел с varchar.


если строка всегда будет 32 символа (возможно, у вас есть хэш md5), перейдите к Char (32) Вы всегда можете запустить этот скрипт против любой таблицы и посмотреть, что mysql должен сказать

SELECT * FROM table PROCEDURE ANALYSE();

это проанализирует все ваши строки и даст вам некоторые предложения. Работает хорошо только если у вас есть приличное количество строк в вашей таблице.