我有一个名为users
的表格,其中包含firstname
列和整理utf8_bin
我想知道当我执行像
这样的查询时会发生什么SELECT * FROM `users` `a` WHERE `a`.`firstname` = 'sander' COLLATE utf8_general_ci
列firstname
不是索引,执行命令时性能会怎样?
如果默认排序规则是utf8_general_ci
并且查询是在没有COLLATE
我想知道它对大桌子的影响(800万+记录)
答案 0 :(得分:3)
在这种情况下,由于强制整理是在与列编码相同的字符集上定义的,因此不会对性能产生任何影响。
但是,如果强制使用不同字符集定义的排序规则,MySQL可能必须对列的值进行转码( 会对性能产生影响);我认为如果强制整理超过Unicode字符集,MySQL将自动执行此操作,并且任何其他情况都会引发“非法混合排序”错误。
请注意,根据列的定义记录的排序规则仅仅是对MySQL的提示,首选排序规则;它可能会也可能不会在给定的表达式中使用,具体取决于Collation of Expressions下详述的规则。