1

我有一个users用列firstname和排序规则调用的表utf8_bin

我想知道当我执行如下查询时会发生什么

SELECT * FROM `users` `a` WHERE `a`.`firstname` = 'sander' COLLATE utf8_general_ci

该列firstname不是索引,执行命令时性能会怎样?

如果默认排序规则是utf8_general_ci并且查询执行时没有COLLATE

我想知道它对一张大桌子的影响(800 万多条记录)

4

1 回答 1

3

在这种情况下,由于强制排序规则是在与列编码相同的字符集上定义的,因此不会对性能产生任何影响。

但是,如果强制对不同字符集定义的排序规则,MySQL 可能必须对列的值进行转码(这影响性能);我认为如果强制排序超过 Unicode 字符集,MySQL 会自动执行此操作,并且任何其他情况都会引发“非法混合排序”错误。

请注意,根据列定义记录的排序规则只是对 MySQL 的提示,而不是首选排序规则。它可能会或可能不会在给定的表达式中使用,具体取决于Collat​​ion of Expressions中详述的规则。

于 2013-07-05T14:08:32.777 回答