在性能上有区别吗:
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/