假设我们有一个如下所示的表:
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'
在考虑性能时应该首选哪个?
使用非二进制字符排序索引时,使用compare或二进制排序规则binary string更快?
(在表中添加一个新列只是为了存储二进制等效的c1
,这对存储来说是一个很大的打击而且不可能。)
(P.S。希望得到一个比较哈希和btree比较的答案,尽管我主要对btree比较感兴趣。)
答案 0 :(得分:1)
由于表中有索引,对于二进制匹配,使用二进制表示常量,而不是列。这将比您的两个选项都快。
select * from t1 where c1 = binary 'test'
回答你的问题是选项1在你做的事情上会更快
WHERE c1 collate utf8mb4_bin='test'