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

时间:2014-10-19 21:13:51

标签: mysql sql web

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

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比较感兴趣。)

1 个答案:

答案 0 :(得分:1)

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

select * from t1 where c1 = binary 'test'

回答你的问题是选项1在你做的事情上会更快

WHERE c1 collate utf8mb4_bin='test'