LIMIT 0,1会加快主键上的SELECT吗?

时间:2012-07-04 11:15:47

标签: mysql query-optimization relational-database

有没有人知道这两个查询之间是否有任何速度差异(显然对于足够大的表格)

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确实有助于查询继续查找其他匹配项。我假设当涉及主键时,它应该由于它的唯一性而自动停止。所以我的猜测是通过添加它不会有任何收获。

之前有人碰到过这个吗?我现在没有足够大的数据集来测试。我还假设相同的答案适用于已设置为UNIQUE的任何字段。

2 个答案:

答案 0 :(得分:8)

因此,在阅读了Hammerite提供的信息后(感谢您),在两个查询上运行explain会产生:

  • id = 1
  • select_type = SIMPLE
  • table = table
  • type = CONST
  • possible_keys = PRIMARY
  • key = PRIMARY
  • key_len = 767
  • ref = const
  • rows = 1
  • Extra =

将两个查询标识为CONST,链接定义为:

  

<强>常量

     

该表最多有一个匹配的行,在行的开头读取   查询。因为只有一行,所以列中的值   优化器的其余部分可以将此行视为常量。   const表非常快,因为它们只读一次。

因此,假设我正确地理解了两个查询,它们将被视为相同 - 这正是我所期望的。

答案 1 :(得分:4)

主键将作为索引进行搜索,速度非常快。

但是限制查询是最佳做法的一部分。

对于任何更复杂的查询,它将使用Joins,Group_by和order by by甚至单次搜索,它允许sql在找到你的限制记录row_count之后停止,例如:1

如果你要使用order by,它将允许sql从ordered by列开始适当的搜索,并在找到1条记录后停止,即使在其他指定的列或条件中找到其他记录,例如:

SELECT Primary_keycoll,field2 FROM table WHERE Primary_keycoll = "value1" or field2 = 'value1' order by field2 limit 0,1也许Primary_keycoll是唯一的,但是其他例如:field2可能不会,限制为1,允许mysql获取第一个并停止,否则它将通过整个指定的列或资源来确保其他列不满足查询。

出于安全原因,在查询结束时使用limit是一种很好的做法,它会阻止一些SQL注入技巧。只要你的限制器,正确消毒。

http://dev.mysql.com/doc/refman/5.0/en/limit-optimization.html

相关问题