php - mysql多行选择性能

标签 php mysql performance select

在性能上有区别吗:

SELECT * FROM table WHERE id IN (1,2,3)

对比

SELECT * FROM table WHERE id = 1
SELECT * FROM table WHERE id = 2
SELECT * FROM table WHERE id = 3

执行每个查询,因此 PHP 总共要执行 3 个查询

最佳答案

尽管它们看起来相似,但提供的两个示例做不同的事情。使用设计的结构来做你想做的事。在这里担心“优化”是愚蠢和过早的:一个好的模型和好的设计应该是第一位的。

第一种情况是一个查询——它返回一个结果集(大概最多 3 个项目,假设 ID 是一个 PK)。 集合中记录的顺序未定义,因为没有 ORDER BY。

第二种情况有三个查询——因此三个结果集(定义了结果集相互关系的顺序)——每个结果集(再次假设 ID 是PK) 将产生 0 或 1 条记录。

现在,要是这么简单就好了……取决于第二个是否在事务内部执行(以及事务的隔离级别和后端做出的保证)决定是否相同的元素保证在这两种情况下退回。也就是说,假设 ID=2 的记录在 SELECT ID=1 之后但在 SELECT ID=2 之前被删除——结果应该是什么?

综上所述,“正确”的选择可能是单选,尽管可以想象需要第二个的病态情况。作为奖励,处理单个结果集通常也更容易。

我怀疑第一种情况也会[稍微]更好地执行,因为查询执行的开销很小,而且无论如何,它应该不会慢比第二个。根据包括连接延迟在内的其他因素,性能差异可能会或可能不会被忽略。但是,“确定”知道的唯一方法是对实际数据/使用情况运行性能测试检查查询计划(参见EXPLAIN) .

快乐的编码。

关于php - mysql多行选择性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6722150/

相关文章:

php - Jquery UI 日历显示 mysql 日期?

php - 从 2 个 mysql 表中获取并显示按月记录

php - mysql 查询需要很长时间

java - 优化从大表中获取数据

performance - 在 zsh 中的每个命令之后自动执行内置时间(如 tcsh 中的 `set time`)

php - 搜索连接值

php - 如何使用 PHP 日期格式的单词?

mysql - MySQL 有多少实时未提交事务

c++ - 从我的程序连接到 mysql Web 数据库

c# - 加快 MSBuild 构建过程