当WHERE子句上有唯一列时,使用LIMIT 1会很有用吗?

时间:2016-06-06 10:27:15

标签: mysql sql limit

我的所有问题都是上面的标题。

其实我想知道limit在mysql中是如何工作的?假设这个表:

// colors
+----+-------+
| id | color |
+----+-------+
| 1  | blue  |
| 2  | red   |
| 3  | green |
| 4  | white |
| 5  | grey  |
| 6  | brown |
| 7  | black |
| 8  | pink  |
+----+-------+

如您所知id列是唯一的(它是PK)。这是我的疑问:

SELECT color FROM colors WHERE id = 5;

现在我想知道,如果我在结尾使用LIMIT 1,上面的查询会更有效吗?

2 个答案:

答案 0 :(得分:1)

不,因为你要检索一行, 如果添加限制1,则dbms将计算行数并确定是否有必要限制结果。

这是一项不必要的工作。

答案 1 :(得分:1)

MySQL(以及所有其他rdbms)基于主键非常有效地定位记录。添加限制1不会对速度产生重大影响。

但是,如果上述(或类似)查询在选择列表中使用了相关子查询,则限制1子句将很方便。此类查询必须返回单个记录,限制1将明确告知MySQL该查询不能返回超过1行。

select ..., (SELECT color FROM colors WHERE id = outer_query_field limit 1)
from ...