Сравнение MySQL байтов за байтом, которое быстрее? двоичный vs bin_collate
Предположим, что у нас есть таблица, которая выглядит так:
create table t1(c1 varchar(x)collate utf8mb4_general_ci, index(c1))
Чтобы делать байт-чувствительные сравнения, мы имеем в основном два пути (предположим, что все соответствующие строки не имеют конечные пробелы, т.е. все они padspace-compliant):
select*from t1 where c1 ='test'collate utf8mb4_bin
select*from t1 where c1 = binary'test'
Что должно быть предпочтительным, если производительность вызывает озабоченность?
При использовании индекса невариантной сортировки символов быстрее сравнить с двоичная строка или двоичная сортировка?
(Добавление нового столбца в таблицу только для хранения двоичного эквивалента c1
является большим хитом при хранении и не возможно.)
(P.S. Понравился бы ответ, который сравнивает как сравнение хэша, так и btree, хотя меня в первую очередь интересует сравнение btree.)
Ответы
Ответ 1
Поскольку у вас есть индекс в таблице, для двоичного соответствия используйте двоичный код для константы, а не для столбца. Это будет быстрее, чем ваши варианты.
select * from t1 where c1 = binary 'test'
Ответ на вопрос: вариант 1 будет быстрее, если вы делаете
WHERE c1 collate utf8mb4_bin='test'