Mysql 组合两个更新命令-性能?

Mysql 组合两个更新命令-性能?,mysql,performance,api,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 这真的是性能提升吗

如果要更新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编写的高性能重载Web服务器。

对其进行基准测试。从理论上讲,它的速度更快,但它可能在您不知情的情况下(由编译器或其他人)在其他地方进行了优化,并且在实践中不会产生任何影响。

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

是的,它会更快,因为您只需在数据库中进行一次访问,而不是两次。网络调用的开销很可能会主导这种查询(除非MySQL做出真正糟糕的优化器决策)


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

单服务器请求通常是一个好主意,因为客户端和服务器之间的往返通常是许多查询中最昂贵的部分(威尔·哈东已经指出)


但是,检查特定查询的优化可能会很有用。条件
id=id1或id=id2
听起来像是将使用范围搜索(请参阅)。我不完全确定,但可能会导致从
id1
id2
的索引扫描,如果它们在逻辑上是“远”的,则可能会很昂贵除了索引之外。使用
in
操作符:
where-ID in(ID1,ID2)
可能更有效。或者可能使用两个单独的语句。

谢谢。这对我很有用,我像下面马克·威尔金斯建议的那样将其组合起来。例如:
mysql\u查询(“更新dns集ns=1,jenis=IF(数据='$ns1',1',2'))其中set='$set'和('$ns1','$ns2'))中的数据;