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

Mysql 我应该在搜索唯一索引时设置限制吗?,mysql,sql,Mysql,Sql,例如,我有这个查询 SELECT * FROM `table` WHERE `id` = '5123' 在此查询中,它将搜索id为5123的所有结果。 但我只希望返回1行,因此我可以向查询中添加限制1 但是如果说id是一个唯一的索引,那么在找到一个之后它还会继续搜索结果吗?否 索引所做的事情之一正是您所建议的: MySQL使用索引执行以下操作: 快速查找与WHERE子句匹配的行 不考虑行。如果在多个索引之间有选择,MySQL通常使用查找最少行数的索引(选择性最高的索引) 查询中包含的子句越多

例如,我有这个查询

SELECT * FROM `table` WHERE `id` = '5123'
在此查询中,它将搜索id为5123的所有结果。 但我只希望返回1行,因此我可以向查询中添加限制1

但是如果说
id
是一个唯一的索引,那么在找到一个之后它还会继续搜索结果吗?

索引所做的事情之一正是您所建议的:

MySQL使用索引执行以下操作:

  • 快速查找与WHERE子句匹配的行
  • 不考虑行。如果在多个索引之间有选择,MySQL通常使用查找最少行数的索引(选择性最高的索引)

查询中包含的子句越多,服务器的负担就越重,如果在此列中定义了唯一的约束,则此列中不存在重复的可能性,因此我个人会避免使用LIMIT。

可能

这取决于执行计划

如果表中只有少数行,那么优化器可能会决定执行完整的表扫描。但是不要担心,如果ID列是唯一的,它将永远不会返回多行


您不应向查询中添加限制1。除非您看到查询速度非常慢,否则您应该信任优化器。

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

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

不知何故,我对主键和只有唯一索引的列的感觉不同。而且,因为如果返回额外的行,代码可能会中断,所以我倾向于谨慎

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


就性能而言,使用
limit
应该没有什么区别。

通常您的id是主键,然后自动成为唯一的id。无需限制。