我有一个包含9列的表格。这些列的5(我们称之为A
,B
,C
,D
,F
)组合成一个唯一标识(主键)每一行。我们打电话给剩下的4 G
,H
,I
,J
我正在尝试使用包含这5列的WHERE
子句插入或更新150.000行。我现在正在做的是这个
SELECT 1 FROM table_name WITH (NOLOCK)
WHERE A = STRING_HERE
AND B = STRING_HERE
AND C = STRING_HERE
AND D = NUMBER_HERE
AND F = NUMBER_HERE
如果结果有条目,我会像这样进行更新
UPDATE table_name
SET G=NUMBER_HERE,
H=NUMBER_HERE,
I=NUMBER_HERE,
J=NUMBER_HERE
WHERE A = STRING_HERE
AND B = STRING_HERE
AND C = STRING_HERE
AND D = NUMBER_HERE
AND F = NUMBER_HERE
如果不是,我只执行INSERT
声明。
现在SELECT
语句不在整个事务中。
UPDATE
和INSERT
语句位于事务中(autocommit
设置为false
)。
现在我对CLUSTERED
,A
,B
,C
和D
的组合使用F
索引。也许NON-CLUSTERED
会更好?
大多数调用都是UPDATE
语句(类似于70%或更多)
总体任务需要很长时间才能完成(大约一个小时)。
为了改善所提到的任务的性能,你有什么想法,注意事项和注意事项吗?
我已经开始尝试将INSERT
和UPDATE
语句作为批处理执行,但即使SELECT
语句也需要太长时间。而且,为了避免任何运行时灾难,我应该为每个X条目执行批处理吗?
我正在使用Java和JDBC准备语句来执行命令和SQL Server 2008.没有使用ORM。
不考虑比赛条件。这是isolated
任务。在此操作期间,不会从其他源/操作更改任何数据。
答案 0 :(得分:0)
如果适合您,请按照以下步骤操作。
如果您需要帮助,请告诉我