我使用'id
'字段 - char(22)
作为MySQL表的主键。
此字段仅用于在向表中添加新用户时过滤唯一ID。
对我而言,使用utf8_bin
或utf8_general_ci
整理并不重要,因为字母大小写并不重要,我只使用英文字母作为id。
唯一的问题是: 整理将提供更快的性能?
我桌子最常见的查询是:
LOAD DATA INFILE ... IGNORE INTO TABLE mytable(id)
or
INSERT IGNORE INTO mytable(id)...
and
SELECT COUNT(id) FROM mytable
现在,由于表格不大,我看不出性能上的任何差异,但是当我的表格中的行数超过200万时会发生什么?
utf8_general_ci collation会为INSERT或LOAD IGNORE和SELECT COUNT查询提供更快的性能吗?
答案 0 :(得分:5)
通常,utf8_bin
至少与utf8_general_ci
一样快,因为除了识别多字节字符之外,二进制数据上的it does not perform any processing。
也就是说,id
列上存在索引以及您只想检测重复而不是排序的事实应该意味着绝对没有可检测到的差异。然而,这只是一个有根据的猜测,所以我可能是错的(即使它看起来不太可能)。