我有一个名为 users
的表,其中有一列 firstname
和排序规则 utf8_bin
我想知道当我执行类似这样的查询时,幕后发生了什么
SELECT * FROM `users` `a` WHERE `a`.`firstname` = 'sander' COLLATE utf8_general_ci
列 firstname
不是索引,执行命令时性能会发生什么变化?
如果默认排序规则是 utf8_general_ci
并且查询是在没有 COLLATE
的情况下执行的
我想知道它对一个大表(800万+条记录)的影响
最佳答案
在这种情况下,由于强制排序规则是在与列编码相同的字符集上定义的,因此不会对性能产生任何影响。
但是,如果强制使用在不同字符集上定义的排序规则,则 MySQL 可能必须对列的值进行转码(这会对性能产生影响);我认为如果强制排序规则超过 Unicode 字符集,MySQL 会自动执行此操作,任何其他情况都会引发“非法混合排序规则”错误。
请注意,根据列的定义记录的排序规则只是向 MySQL 提示优先排序规则;根据 Collation of Expressions 下详述的规则,它可能会也可能不会用于给定的表达式中.
关于MYSQL 整理性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17489824/