mysql - SQL 性能 : comparing n values

标签 mysql sql database performance database-performance

假设我们要从表中检索 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 表达式更短(而且性能更好!)。

为什么这样更好?

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

关于mysql - SQL 性能 : comparing n values,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46478293/

相关文章:

database - 如何获取数据库列更改的通知

c# - 在 DataGridView C# 中显示 MySQL 数据库值

sql - 了解 MDX 'ALL' 吗?

php - 当通过 PHP 脚本访问时,MySQL 告诉我凭据不正确

php - MySQL 行位置

PHP 不更新数据库中的行

Java和MySql连接问题

php - mysql使用表的id生成动态url

php - 更新 mysql 表中的部分值

mysql - MySQL 可以处理多少个数据库?