2012-07-11 144 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();