SQL性能:比较n个值

时间:2017-09-28 21:04:55

标签: mysql sql database performance database-performance

假设我们想要从表中检索n个元素(类型string / varchar(64))。

我们假设0< = n< 1000。

这两个中哪一个最快,需要的资源更少?

SELECT id, last_name 
FROM Users 
WHERE last_name="a" 
OR last_name="b" 
OR last_name="c" 
OR last_name="d"....

VS

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)

1 个答案:

答案 0 :(得分:2)

第一个应该是最快的。过滤数据库中的 是最佳选择 - 我无法想到任何例外情况。

代码应写为:

SELECT id, last_name
FROM Users
WHERE last_name IN ('a', 'b', 'c', 'd', . . . );

(如果您也需要first_name,请将其放入SELECT

单引号是字符串常量的ANSI标准,IN比一堆OR表达式更短(性能更好!)。

为什么这样更好?

  1. 从数据库向应用程序返回的数据较少。这是最重要的原因。
  2. 数据库可以使用索引查找行(如果有的话)。
  3. MySQL通过执行布尔搜索,使用常量列表优化IN
  4. 许多数据库(但不是MySQL)可以并行进行比较。