例如,我正在查询一个我知道将是唯一的并且已建立索引(例如主键)的字段。因此我知道这个查询只会返回 1 行(即使没有 LIMIT 1)
SELECT * FROM tablename WHERE tablename.id=123 LIMIT 1
或者只更新 1 行
UPDATE tablename SET somefield='somevalue' WHERE tablename.id=123 LIMIT 1
会添加LIMIT 1
如果字段被索引,可以提高查询执行时间吗?
在主键/唯一字段上查询时使用MySQL“LIMIT 1”有什么意义吗?
使用这不是一个好的做法LIMIT 1
当使用违反主键或唯一约束的过滤条件进行查询时。主键或唯一约束意味着表中只有一行/记录具有该值,并且只会返回一行/记录。拥有是矛盾的LIMIT 1
在主键/唯一字段上 - 稍后维护代码的人可能会误解重要性并再次猜测您的代码。
但最终的指标是解释计划:
explain SELECT t.name FROM USERS t WHERE t.userid = 4
...返回:
id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra
-----------------------------------------------------------------------------------------------------
1 | SIMPLE | users | const | PRIMARY | PRIMARY | 4 | const | 1 |
...and:
explain SELECT t.name FROM USERS t WHERE t.userid = 4 LIMIT 1
...返回:
id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra
-----------------------------------------------------------------------------------------------------
1 | SIMPLE | users | const | PRIMARY | PRIMARY | 4 | const | 1 |
结论
没有区别,没必要。在这种情况下,它似乎已被优化(仅针对主键进行搜索)。
索引字段怎么样?
索引字段不保证被过滤的值的唯一性,可能会出现多次。所以LIMIT 1
假设您想返回一行,这是有道理的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)