Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 性能:插入或更新索引选择_Java_Performance_Sql Server 2008_Jdbc - Fatal编程技术网

Java 性能:插入或更新索引选择

Java 性能:插入或更新索引选择,java,performance,sql-server-2008,jdbc,Java,Performance,Sql Server 2008,Jdbc,我有一个9列的表。这些列中的5个组成了每行的唯一标识主键,我们称它们为A、B、C、D、F。让我们把剩下的4g,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

我有一个9列的表。这些列中的5个组成了每行的唯一标识主键,我们称它们为A、B、C、D、F。让我们把剩下的4g,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语句位于设置为false的事务自动提交中

现在,我在a、B、C、D和F的组合上使用聚集索引。也许非聚集索引会更好

大多数调用都是UPDATE语句,大约70%或更多 整个任务耗时太长,大约一个小时无法完成

为了提高上述任务的执行效率,你有什么想法和注意事项吗

我已经开始尝试批量执行INSERT和UPDATE语句,但即使是SELECT语句也会花费太长时间。此外,为了避免任何运行时灾难,我应该为每个X条目执行批处理吗

我正在使用Java和JDBC以及用于执行命令和SQLServer2008的准备好的语句。没有使用ORM


不考虑比赛条件。这是一项孤立的任务。在此操作期间,不会更改来自其他源/操作的数据

如果适合您,请按照以下步骤操作

使用大容量插入在临时表中插入所有记录 创建一个存储过程 插入: 插入表A、B、,。。。选择A、B、,。。。。来自表1 如果不存在,则从表_name i1中选择A,其中i.A=i1.A和i.B=i1.B,….所有PK 更新内容: 更新表格名称集G=i.G。。。 从存在的表_temp i中从表_name i1中选择A,其中i.A=i1.A和i.B=i1.B,….所有PK 叫这个SP。
如果您还需要帮助,请告诉我

您是在一次插入/更新一条记录还是在做什么?这是一个事务,因此在结束时将调用一次提交。但是,是的,每个操作都是单一的。现在我正在将逻辑转换为使用批处理。这样会显著提高整体性能吗?如果是,那么我应该记住任何陷阱吗?是的,当然你会看到性能上的巨大差异,我建议插入和更新还有一件事,就是使用join/where子句,我的意思是你不需要检查每个记录,如果记录存在,那么更新else insert。如果您需要更多帮助,请告诉我。谢谢您的回复。你能提供一个例子说明justuse-join/where子句吗?此外,聚集索引是否合适,或者非聚集索引是否应该为上述场景提供更好的性能?显然,clustured会更好,您能告诉我如何进行批量更新/插入吗?