请解释一下,在下面的查询中,哪一个在Mysql中会更快?为名称字段在BINARY或没有Binary的情况下,哪一个会更快?
SELECT * FROM `userstatus` where BINARY Name = 'Raja'
[OR]
SELECT * FROM `userstatus` where Name = 'raja'
Db的条目是“拉贾”
我有10000条记录在我的数据库,我试图与“解释”的查询,但都称执行时间相同。
请解释一下,在下面的查询中,哪一个在Mysql中会更快?为名称字段在BINARY或没有Binary的情况下,哪一个会更快?
SELECT * FROM `userstatus` where BINARY Name = 'Raja'
[OR]
SELECT * FROM `userstatus` where Name = 'raja'
Db的条目是“拉贾”
我有10000条记录在我的数据库,我试图与“解释”的查询,但都称执行时间相同。
你的问题没有意义。
行的排序决定了索引的布局以及测试是否区分大小写。
如果您投了一排,剧组需要时间。
所以逻辑上uncasted操作要快....
但是,如果中投使得它找到更少的行比铸造操作会更快或其他方式轮。
这当然会改变整个问题并使比较无效。
转换为BINARY会使比较区分大小写,改变测试的性质以及非常可能的命中数。
我的建议
再也不用担心排序规则的速度,百分比是如此之小,这是从来没有值得理会。
使用select *
(一个很大的否定)的速度惩罚将远远超过整理问题。
从放入索引开始。这是10,000倍加速的因素,有一百万行。
假设Names
字段是简单的latin-1文本类型,并且没有索引,那么查询的BINARY版本会更快。默认情况下,MySQL会进行不区分大小写的比较,这意味着字段值和您正在比较的值将被捣毁成单个案例(全部上限或全部下限),然后进行比较。执行二进制比较将跳过大小写转换,并对每个字符值进行1:1的原始数字比较,使其成为区分大小写的比较结果。
当然,这只是一个非常具体的情况,在您的情况下不太可能满足。太多的其他因素会影响到这一点,尤其是索引的存在。
如果您的排序规则不区分大小写,并且** Name **被索引,那么第二个查询应该运行得更快,否则应该没有太大的区别。 – Karolis
一般来说,我没有索引我的表中的任何字段,并且在mytable中有超过1000000个,那么这将是更快的! – Raja
嗯... BINARY不依赖整理,所以如果没有索引,这可以运行得更快。在任何情况下,我认为最好的方法是尝试:) – Karolis