我应该在搜索唯一索引时设置限制吗?

时间:2013-12-19 13:29:06

标签: mysql sql

例如我有这个查询

SELECT * FROM `table` WHERE `id` = '5123'

在此查询中,它将搜索id为5123的所有结果。 但我只想要返回1行,所以我可以在查询中添加LIMIT 1。

但是我们可以说id是一个独特的索引,它会在找到结果之后继续搜索结果吗?

4 个答案:

答案 0 :(得分:4)

没有

索引所做的一件事正是你的建议:

  

MySQL使用索引进行这些操作:

     
      
  • 快速查找与WHERE子句匹配的行。
  •   
  • 要排除考虑因素。如果在多个索引之间有选择,MySQL通常会使用找到最小行数的索引(最具选择性的索引)。
  •   

来自http://dev.mysql.com/doc/refman/5.6/en/mysql-indexes.html

答案 1 :(得分:0)

您的查询中有更多条款会给您的服务器带来更多负担,如果它在此列上定义了唯一约束,则此列中不存在重复的可能性,因此我个人会避免使用LIMIT。

答案 2 :(得分:0)

也许。

这取决于执行计划。

如果表中只有少量行,则优化器可能会决定进行全表扫描。但不要担心,如果ID列是唯一的,它将永远不会返回多行。

您不应该在查询中添加LIMIT 1。除非您可以看到查询非常慢,否则您应该信任优化器。

答案 3 :(得分:0)

如果id被定义为主键,那么我就不会使用limit子句。

如果id只有一个唯一索引,那么我倾向于保留limit子句,以确保代码不会产生错误。

不知何故,我对主键与具有唯一索引的列有不同的看法。并且,因为如果返回额外的行,代码可能会中断,我会倾向于谨慎。

顺便说一下,有些情况下这样的查询可以使用唯一索引并仍然返回多行。如果列包含字符串并且列和数据库的排序规则不同,则可能发生这种情况。

就性能而言,limit的使用不应有所作为。