如果我想更新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编写的高性能重载网络服务器。
答案 0 :(得分:1)
单个服务器请求通常是一个好主意,因为客户端和服务器之间的往返通常是许多查询中最昂贵的部分(正如Will Hartung已经指出的那样)。
但是,检查特定查询的优化可能很有用。条件id = id1 or id = id2
听起来会使用范围搜索(请参阅OR Relations)。我不完全确定,但可能导致从ID1
到ID2
的索引扫描,如果它们在索引中逻辑上“远”分开可能会很昂贵。使用IN
运算符可能更有效:where ID in (ID1, ID2)
。或者可能使用两个单独的陈述。
答案 1 :(得分:0)
基准测试。理论上它更快,但它可能在不知情的情况下(通过编译器或其他东西)在其他地方进行优化,并且在实践中可能没有任何区别。
答案 2 :(得分:0)
这是否会表现更好将取决于您的设置。我们可以猜测,但只有剖析查询时间会告诉你哪个更好。
答案 3 :(得分:0)
是的,它会更快,因为你只需要一次数据库而不是两次。可能网络调用的开销将主导这种类型的查询(除非MySQL部分的实际错误的优化器决策)。
但是,即使您有两个单独的UPDATE语句,通常也可以通过单个请求将它们发送到后端,并且您也将继续使用标准SQL。