MySQL逐字节比较,哪个更快?binary vs bin_collat​​e

Pac*_*ier 6 mysql sql web

假设我们有一个如下所示的表:

create table t1(c1 varchar(x)collate utf8mb4_general_ci, index(c1))
Run Code Online (Sandbox Code Playgroud)

要进行字节敏感的比较,我们基本上有两种方式(假设所有相关字符串都没有尾随空格,即它们都符合padspace标准):

select*from t1 where c1 ='test'collate utf8mb4_bin

select*from t1 where c1 = binary'test'
Run Code Online (Sandbox Code Playgroud)

当性能受到关注时,哪个应该是首选的?

使用非二进制字符排序索引时,与二进制字符串或二进制排序规则进行比较是否更快?

(在表中添加一个新列只是为了存储二进制等效项,c1这对存储来说是一个很大的打击而且不可能.)

(PS会欣赏一个比较hash和btree比较的答案,尽管我主要对btree比较感兴趣.)

小智 1

由于表中有索引,对于二进制匹配,请使用二进制作为常量,而不是列。这将比您的两个选项更快。

select * from t1 where c1 = binary 'test'
Run Code Online (Sandbox Code Playgroud)

回答你的问题是选项 1 会更快

WHERE c1 collate utf8mb4_bin='test'
Run Code Online (Sandbox Code Playgroud)