将限制0,1关于加快主键的选择?(Would LIMIT 0,1 speed up a SELECT

2019-09-19 02:34发布

有谁知道是否有任何速度差(显然对于那些足够庞大的表)这两个查询之间:

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

Answer 1:

所以看书跑由Hammerite(谢谢你提供的)提供的资料后explain在这两个查询产生:

  • ID = 1
  • SELECT_TYPE = SIMPLE
  • 表=表
  • 类型= CONST
  • possible_keys = PRIMARY
  • 键= PRIMARY
  • key_len = 767
  • REF =常数
  • 行= 1
  • 额外=

标识包括查询CONST ,其链接的定义:

常量

该表最多有一个匹配行,这是在查询开始阅读。 因为只有一行,从该行中的列值可被优化的其余部分被视为常数。 const的表是非常快的,因为它们只读取一次。

因此,假如我理解正确,这两个查询,他们会得到相同的待遇 - 这是我的预期。



Answer 2:

该主键将被搜索的速度非常快的指数。

但只是限制你的查询是最佳实践的一部分。

在任何更复杂的查询会与加盟,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



文章来源: Would LIMIT 0,1 speed up a SELECT on a Primary Key?