Сравнение 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'