结合两个UPDATE命令 - 性能?

时间:2010-05-18 21:52:01

标签: mysql performance api

如果我想更新MySQL表中的两行,请使用以下两个命令:

UPDATE table SET Col = Value1 WHERE ID = ID1

UPDATE table SET Col = Value2 WHERE ID = ID2`

我通常将它们组合成一个命令,这样我就不必从我的C客户端两次联系MySQL服务器了:

UPDATE table SET Col = IF( ID = ID1 , Value1 , Value2) WHERE ID=ID1 OR ID=ID2

这真的是性能提升吗?

背景资料:我使用的是定制的完全C编写的高性能重载网络服务器。

4 个答案:

答案 0 :(得分:1)

单个服务器请求通常是一个好主意,因为客户端和服务器之间的往返通常是许多查询中最昂贵的部分(正如Will Hartung已经指出的那样)。

但是,检查特定查询的优化可能很有用。条件id = id1 or id = id2听起来会使用范围搜索(请参阅OR Relations)。我不完全确定,但可能导致从ID1ID2的索引扫描,如果它们在索引中逻辑上“远”分开可能会很昂贵。使用IN运算符可能更有效:where ID in (ID1, ID2)。或者可能使用两个单独的陈述。

答案 1 :(得分:0)

基准测试。理论上它更快,但它可能在不知情的情况下(通过编译器或其他东西)在其他地方进行优化,并且在实践中可能没有任何区别。

答案 2 :(得分:0)

这是否会表现更好将取决于您的设置。我们可以猜测,但只有剖析查询时间会告诉你哪个更好。

答案 3 :(得分:0)

是的,它会更快,因为你只需要一次数据库而不是两次。可能网络调用的开销将主导这种类型的查询(除非MySQL部分的实际错误的优化器决策)。

但是,即使您有两个单独的UPDATE语句,通常也可以通过单个请求将它们发送到后端,并且您也将继续使用标准SQL。