2012-07-11 104 views
0

我肚里有点如下表:更新不同行快速

名1(按键)|名称2(重点)|张| LASTUPDATE

将有成千上万的这样的记录。

现在很频繁,我的主程序将查询源以获取更新的值。然后它将更新总数和最后一次更新。它可能需要更新数百个这样的行。

目前我有这样的:

Update mytable SET Total=[...] AND LastUpdate=[....] WHERE Name1='x' AND Name2='y'; 
Update mytable SET ..... 

我不知道是否有更新行的更快的方式(类似于你怎么能同时插入多行)。

总计将完全不同,但LastUpdate时间对于每个更新都是相同的。

更新澄清:

总的变化不仅仅是一个增量,不依赖于当前值 - 所以它不是在这方面的确定性。消息来源为我提供了一个新的价值,每秒钟左右,我必须投入一个新的。

+0

随着单行更新以下全部加起来相当显著的开销;通过网络发送查询,服务器解析查询以及生成执行计划的服务器。假设你有合适的索引,实际更新可能相当快。您可以通过使用准备好的语句(然后保留并重新使用该连接和准备好的语句)来减轻大部分初始的头部负担。传输查询变得更小,语句只需要解析一次,执行计划只需要生成一次。你在使用准备好的语句吗? – MatBailie 2012-07-11 09:06:05

+0

使用预准备语句使其工作更快。感谢您的建议。 – Aabela 2012-07-11 13:14:59

回答

0

如果将放缓至separatly做更新,mayby你可以做财产以后这样

CREATE TABLE mytable_updates 
(
    Name1 VARCHAR(50) NOT NULL, 
    Name2 VARCHAR(50) NOT NULL, 
    total_increase INT NOT NULL 
    PRIMARY KEY(Name1, Name2) 
) 

INSERT INTO mytable_updates VALUES ('x', 'y', 5), ('x', 'z', 3); 
... 

UPDATE mytable_updates 
LEFT JOIN mytable USING (Name1, Name2) 
SET 
    Total = Total + total_increase, 
    LastUpdate = NOW();