2011-10-03 41 views
2

请解释一下,在下面的查询中,哪一个在Mysql中会更快?为名称字段在BINARY或没有Binary的情况下,哪一个会更快?

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

[OR] 

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

Db的条目是“拉贾”

我有10000条记录在我的数据库,我试图与“解释”的查询,但都称执行时间相同。

+1

如果您的排序规则不区分大小写,并且** Name **被索引,那么第二个查询应该运行得更快,否则应该没有太大的区别。 – Karolis

+0

一般来说,我没有索引我的表中的任何字段,并且在mytable中有超过1000000个,那么这将是更快的! – Raja

+0

嗯... BINARY不依赖整理,所以如果没有索引,这可以运行得更快。在任何情况下,我认为最好的方法是尝试:) – Karolis

回答

2

你的问题没有意义。

行的排序决定了索引的布局以及测试是否区分大小写。
如果您投了一排,剧组需要时间。

所以逻辑上uncasted操作要快....

但是,如果中投使得它找到更少的行比铸造操作会更快或其他方式轮。
这当然会改变整个问题并使比较无效。

转换为BINARY会使比较区分大小写,改变测试的性质以及非常可能的命中数。

我的建议
再也不用担心排序规则的速度,百分比是如此之小,这是从来没有值得理会。
使用select *(一个很大的否定)的速度惩罚将远远超过整理问题。
从放入索引开始。这是10,000倍加速的因素,有一百万行。

2

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

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