请解释一下,对于以下查询,哪一个在Mysql中会更快?
SELECT * FROM `userstatus` where BINARY Name = 'Raja'
[OR]
SELECT * FROM `userstatus` where Name = 'raja'
名称字段的Db条目是'Raja'
我的数据库中有10000条记录,我尝试使用“解释”查询,但都说同一执行时间。
答案 0 :(得分:2)
你的问题没有意义。
行的排序规则决定了索引的布局以及测试是否区分大小写 如果你施放一行,演员阵容需要时间。
从逻辑上说,未发布的操作应该更快......
但是,如果演员阵容使其找到的行数少于演出的行,则会更快或反之亦然 这当然会改变整个问题并使比较无效。
对BINARY的强制转换使得比较区分大小写,改变了测试的性质,很可能是命中次数。
我的建议
永远不要担心整理的速度,百分比是如此之小,永远不值得打扰
使用select *
(一个大不拒绝)的速度惩罚将远远超过整理问题
从放入索引开始。这是一个万倍的加速因子,有一百万行。
答案 1 :(得分:2)
假设Names
字段是一个简单的latin-1文本类型,并且没有索引,那么查询的BINARY版本会更快。默认情况下,MySQL会进行不区分大小写的比较,这意味着字段值和您要比较的值都被粉碎成一个案例(全高或全低)然后进行比较。进行二进制比较会跳过大小写转换,并对每个字符值进行原始的1:1数字比较,使其成为区分大小写的比较。
当然,这只是一个非常具体的情况,在你的情况下不太可能实现。太多其他因素会影响这一点,尤其是索引的存在。