假设我们有一个如下所示的表:
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)