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。无需限制。