假设我们要从表中检索 n
个元素(类型 string
/varchar(64)
)。
我们假设 0 <= n
< 1000。
这 2 个中哪个最快并且需要的资源更少?
SELECT id, last_name
FROM Users
WHERE last_name="a"
OR last_name="b"
OR last_name="c"
OR last_name="d"....
对比
SELECT id, first_name, last_name
FROM mytable
然后是用于过滤输出的代码处理,例如在简单的 Python 中:
result = []
for last_name in output:
if last_name in POSSIBLE_NAMES:
result.append(last_name)
最佳答案
第一个应该是最快的。 在数据库中过滤 是最好的方法——我想不出有什么异常(exception)。
代码应该写成:
SELECT id, last_name
FROM Users
WHERE last_name IN ('a', 'b', 'c', 'd', . . . );
(如果您也想要 first_name
,请将其放入 SELECT
。)
单引号是字符串常量的 ANSI 标准,IN
比一堆 OR
表达式更短(而且性能更好!)。
为什么这样更好?
- 从数据库返回到应用程序的数据较少。这是首要原因。
- 如果索引可用,数据库可以使用索引来查找行。
- MySQL 通过执行 bool 搜索使用常量列表优化
IN
。 - 许多数据库(但不是 MySQL)可以并行进行比较。
关于mysql - SQL 性能 : comparing n values,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46478293/