以下各项之间是否存在性能差异:
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个查询
发布于 2011-07-17 14:39:32
这两个例子看起来很相似,但却做了不同的事情。使用你想要的结构。在这里担心“优化”是愚蠢和不成熟的:一个好的模型和好的设计应该是第一位的。
第一种情况是一个查询--它返回一个结果集(假设ID是一个PK,最多可包含3个条目)。未定义集合中记录的顺序,因为没有order BY。
第二种情况有三个查询--因此定义了三个结果集(定义了结果集相互之间的顺序) --每个结果集(同样假设ID是一个PK)将产生0或1条记录。
现在,如果事情真的那么简单...取决于第二个是否在事务内执行(以及事务的隔离级别和后端做出的保证),确定在两种情况下是否保证返回相同的项。也就是说,假设在SELECT ID=1之后但在SELECT ID=2之前删除了带有ID=2的记录--结果应该是什么?
话虽如此,“正确”的选择很可能是单项选择,尽管可以想象需要第二种选择的病理情况。作为额外的好处,处理单个结果集通常也更容易。
我怀疑第一种情况的性能也会稍好一些,因为查询执行的开销很小,而且在任何情况下,它都不应该比第二种慢。性能上的差异可能可以忽略也可能不会忽略,这取决于包括连接延迟在内的其他因素。然而,要“确定”,唯一的方法是对实际数据/使用情况运行性能测试,并检查查询计划(参见EXPLAIN)。
祝你编码愉快。
发布于 2011-07-17 13:52:06
虽然在这个特定的例子中,差异可能可以忽略不计,但确实存在差异。
第一个版本是1个查询,第二个版本是3个查询。执行更多的查询通常会导致更多的开销。
发布于 2011-07-17 13:51:46
是的,在这种情况下,执行3个单独的查询将会慢得多,特别是如果不涉及索引,并且您正在处理大型表。
https://stackoverflow.com/questions/6722150
复制相似问题