有谁知道是否有任何速度差(显然对于那些足够庞大的表)这两个查询之间:
SELECT field FROM table WHERE primary_key = "a particular value"
要么:
SELECT field FROM table WHERE primary_key = "a particular value" LIMIT 0,1
我要指出的是, primary_key
场实际上是一个主键。
现在LIMIT 0,1
确实帮助时,查询否则将继续寻找其他的比赛。 我假设,虽然,当一个主键是参与它应该自动停止,由于它的独特性。 所以我的猜测是,有通过增加将不会有任何收获。
任何人都遇到过这样过吗? 我没有足够大的数据集躺在身边的那一刻到1993。 我还认为相同的答案将适用于已被设置为任何领域UNIQUE
。
所以看书跑由Hammerite(谢谢你提供的)提供的资料后explain
在这两个查询产生:
- ID = 1
- SELECT_TYPE = SIMPLE
- 表=表
- 类型= CONST
- possible_keys = PRIMARY
- 键= PRIMARY
- key_len = 767
- REF =常数
- 行= 1
- 额外=
标识包括查询CONST
,其链接的定义:
常量
该表最多有一个匹配行,这是在查询开始阅读。 因为只有一行,从该行中的列值可被优化的其余部分被视为常数。 const的表是非常快的,因为它们只读取一次。
因此,假如我理解正确,这两个查询,他们会得到相同的待遇 - 这是我的预期。
该主键将被搜索的速度非常快的指数。
但只是限制你的查询是最佳实践的一部分。
在任何更复杂的查询会与加盟,GROUP_BY和ORDER BY甚至单个搜索,它允许SQL停下来,你的极限记录ROW_COUNT被发现后,如:1
如果你要使用order by,它将使SQL适当地从有序柱开始搜索和1个记录被发现后停止,即使其他记录将其他指定的列或条件如中找到:
SELECT Primary_keycoll,field2 FROM table WHERE Primary_keycoll = "value1" or field2 = 'value1' order by field2 limit 0,1
也许Primary_keycoll是独一无二的,但其他如:场可能不会,限制为1,让MySQL来获得第一和停止,否则,它将走线槽整个指定的列或资源,以确保其他列不符合查询。
在您的查询的末尾使用限制是很好的做法出于安全考虑,它会阻止一些SQL注入伎俩。 只要你限制器,是正确进行消毒。
http://dev.mysql.com/doc/refman/5.0/en/limit-optimization.html