在使用BINARY或没有二进制的MySQL中哪一个会更快?

时间:2011-10-03 15:24:14

标签: mysql

请解释一下,对于以下查询,哪一个在Mysql中会更快?

SELECT * FROM `userstatus` where BINARY Name = 'Raja'

[OR]

SELECT * FROM `userstatus` where Name = 'raja'

名称字段的Db条目是'Raja'

我的数据库中有10000条记录,我尝试使用“解释”查询,但都说同一执行时间。

2 个答案:

答案 0 :(得分:2)

你的问题没有意义。

行的排序规则决定了索引的布局以及测试是否区分大小写 如果你施放一行,演员阵容需要时间。

从逻辑上说,未发布的操作应该更快......

但是,如果演员阵容使其找到的行数少于演出的行,则会更快或反之亦然 这当然会改变整个问题并使比较无效。

对BINARY的强制转换使得比较区分大小写,改变了测试的性质,很可能是命中次数。

我的建议
永远不要担心整理的速度,百分比是如此之小,永远不值得打扰 使用select *(一个大不拒绝)的速度惩罚将远远超过整理问题 从放入索引开始。这是一个万倍的加速因子,有一百万行。

答案 1 :(得分:2)

假设Names字段是一个简单的latin-1文本类型,并且没有索引,那么查询的BINARY版本会更快。默认情况下,MySQL会进行不区分大小写的比较,这意味着字段值和您要比较的值都被粉碎成一个案例(全高或全低)然后进行比较。进行二进制比较会跳过大小写转换,并对每个字符值进行原始的1:1数字比较,使其成为区分大小写的比较。

当然,这只是一个非常具体的情况,在你的情况下不太可能实现。太多其他因素会影响这一点,尤其是索引的存在。