'SQL SELECT'为了性能有必要使用'Limit 1'吗?

Is it necessary to use 'Limit 1' for 'SQL SELECT' for performance?

例如,我有一个 table (users),它的列是 name

案例一:

I know all "name"s values are different (unique) but i not used 'primary key' for this column

案例二:

I know all "name"s values are different (unique) and i used 'primary key' for this column


如果我对 "Case 1" 和 "Case 2"

使用这两个查询
1. SELECT * FROM `users` WHERE `name` = 'Obama'

2. SELECT * FROM `users` WHERE `name` = 'Obama' LIMIT 1

Case 1Case 2 的性能差异有多大?

只选择 1 个结果总是比选择所有结果更快,无论是否索引,因为 LIMIT 1 在第一个匹配后停止(想想你有数百万个匹配的情况。但即使只有 2 个匹配,它发回 1 个结果比发回 2 个结果更快。)

在列上有索引通常(但不总是)比没有索引快,因为有索引可以在 O(log n) 时间内找到匹配行,而没有索引则需要线性扫描和 O(n) 时间。例外情况是当大多数行匹配时,简单(且快速)的线性扫描可以在比索引 + main table read.

上的二进制搜索开销更短的时间内找到匹配项

编辑:如果查询 运行 用于存在性测试,是的,肯定是 LIMIT 1。计算百万条记录的结果集只是为了检查它是否为空会很慢而且很浪费。 (还有一个 mysql EXISTS 关键字,非常相似,语法略有不同)