utf8_bin против utf8_general_ci. какое сопоставление обеспечит более высокую производительность в таблице MySQL?
Я использую 'id
Поле - char(22)
в качестве первичного ключа для таблицы MySQL. это поле используется только для фильтрации уникальных идентификаторов при добавлении новых пользователей в таблицу.
для меня не важно использовать ли utf8_bin
или же utf8_general_ci
сопоставление, потому что регистр букв не имеет значения, и я использую только английские буквы для идентификатора.
Единственный вопрос: какое сопоставление обеспечит более высокую производительность?
Наиболее распространенные запросы для моей таблицы:
LOAD DATA INFILE ... IGNORE INTO TABLE mytable(id)
or
INSERT IGNORE INTO mytable(id)...
and
SELECT COUNT(id) FROM mytable
Теперь я не вижу никакой разницы в производительности, поскольку таблица невелика, но что происходит, когда количество строк в моей таблице превышает 2 миллиона?
будет ли сортировка utf8_general_ci обеспечивать более высокую производительность для запросов INSERT или LOAD IGNORE и SELECT COUNT?
1 ответ
В общем, utf8_bin
будет по крайней мере так же быстро, как utf8_general_ci
потому что он не выполняет никакой обработки двоичных данных, кроме распознавания многобайтовых символов.
Тем не менее, наличие индекса на id
столбец и тот факт, что вы ищете только обнаружение дубликатов, а не сортировку, должны означать, что не будет абсолютно никакой разницы. Тем не менее, это всего лишь обоснованное предположение, поэтому я могу ошибаться (даже если это не кажется мне вероятным).