2012-10-08 45 views
1

我正在處理超過10000000個數據的應用程序。插入,選擇和更新查詢減慢整個服務器

的MainTable擁有超過1000萬點的數據

我試圖將數據插入到一個子表從主表爲

INSERT INTO SubTable(Value1,Value2) 
SELECT Value1,Value2 FROM MainTable 
GROUP BY Value1_ID; 

在SubTable..Again執行特定處理我更新新後值作爲

UPDATE MainTable inf,SubTable in 
SET inf.Value1=in.Value1, inf.Value2=in.Value2 
WHERE inf.Value1_ID= in.Value1_ID; 

在運行此查詢時,整個服務器變得非常慢,它停止了整個其他事務。我正在使用JDBC Driver Manager連接在這裏。如何避免這種情況?如何解決這個問題呢?

+1

首先分析您的查詢,看看您是否可以提高效率。還可以在您的java代碼中執行此操作。這會給你提示與代碼中的任何瓶頸有關的提示。 – Santosh

+0

另外,把你的數據庫和應用程序邏輯放在不同的服務器上。任何接觸數據庫的東西都會變慢,但至少基本的服務器操作不會受到影響。 – SJuan76

+0

是的,我把數據庫和應用程序放在不同的服務器上。但與數據庫有關的事情會完全放慢。如何解決 –

回答

1

如果這是一段時間你只需要做一次,而不是在一次更新中更新整個表格,你可以設置一個小腳本,將以每隔幾秒/分鐘的行數批量更新或者。其他進程將在兩次更新之間自由執行查詢。
例如,通過每分鐘更新一批100,000行,如果您的表具有正確的索引,則需要1〜2小時,但對性能的影響要小得多。

另一種解決方案是當服務器上的活動處於最低點(可能在週末結束?)時執行更新,這樣您就不會對其他進程造成太大影響。

+0

Tkanks @olchauvin在我的應用程序中,我需要每天運行而不影響性能。 –

+0

我懷疑是否有可能每天都做一些表演,除非有時間傳播。 –