2012-10-08 47 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

我怀疑是否有可能每天都做一些表演,除非有时间传播。 –