例如我有这个查询
SELECT * FROM `table` WHERE `id` = '5123'
在此查询中,它将搜索id为5123的所有结果。 但我只想要返回1行,所以我可以在查询中添加LIMIT 1。
但是我们可以说id
是一个独特的索引,它会在找到结果之后继续搜索结果吗?
答案 0 :(得分:4)
没有
索引所做的一件事正是你的建议:
MySQL使用索引进行这些操作:
- 快速查找与WHERE子句匹配的行。
- 要排除考虑因素。如果在多个索引之间有选择,MySQL通常会使用找到最小行数的索引(最具选择性的索引)。
答案 1 :(得分:0)
您的查询中有更多条款会给您的服务器带来更多负担,如果它在此列上定义了唯一约束,则此列中不存在重复的可能性,因此我个人会避免使用LIMIT。
答案 2 :(得分:0)
也许。
这取决于执行计划。
如果表中只有少量行,则优化器可能会决定进行全表扫描。但不要担心,如果ID列是唯一的,它将永远不会返回多行。
您不应该在查询中添加LIMIT 1。除非您可以看到查询非常慢,否则您应该信任优化器。
答案 3 :(得分:0)
如果id
被定义为主键,那么我就不会使用limit
子句。
如果id
只有一个唯一索引,那么我倾向于保留limit
子句,以确保代码不会产生错误。
不知何故,我对主键与只具有唯一索引的列有不同的看法。并且,因为如果返回额外的行,代码可能会中断,我会倾向于谨慎。
顺便说一下,有些情况下这样的查询可以使用唯一索引并仍然返回多行。如果列包含字符串并且列和数据库的排序规则不同,则可能发生这种情况。
就性能而言,limit
的使用不应有所作为。