Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.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_Sql_Database_Insert_Derby - Fatal编程技术网

Java 增加插入速度

Java 增加插入速度,java,sql,database,insert,derby,Java,Sql,Database,Insert,Derby,我目前正在使用以下查询,仅当记录不存在时才将其插入表中,这可能导致表扫描。它在10分钟内插入28000条记录: INSERT INTO tblExample(column) (SELECT ? FROM tblExample WHERE column=? HAVING COUNT(*)=0) INSERT INTO tblExample(column) VALUES (?) 如果我将查询更改为以下内容,我可以在10分钟内插入98000条记录: INSERT INTO tblExample(c

我目前正在使用以下查询,仅当记录不存在时才将其插入表中,这可能导致表扫描。它在10分钟内插入28000条记录:

INSERT INTO tblExample(column)
(SELECT ? FROM tblExample WHERE column=? HAVING COUNT(*)=0)
INSERT INTO tblExample(column) VALUES (?)
如果我将查询更改为以下内容,我可以在10分钟内插入98000条记录:

INSERT INTO tblExample(column)
(SELECT ? FROM tblExample WHERE column=? HAVING COUNT(*)=0)
INSERT INTO tblExample(column) VALUES (?)
但它不会检查记录是否已经存在


有谁能建议另一种查询方式,使我的插入速度更快吗?

一个简单的解决方案(但不推荐)可以是使用
insert
语句,捕获重复的键异常并记录它们。假设表具有唯一键约束。

确保要检查的列上有索引。通常,请查看数据库正在使用的查询执行计划-这应该告诉您时间的去向,以及如何处理它

对于Derby db,这是一个很好的例子


,如果不存在,则可以作为插入。我自己没有用过,所以您需要测试它,看看它是否适合您的情况。

您在列上有唯一的索引吗?这既可以加快查找查询的速度,又可以强制执行约束(以防您在代码中遗漏它)。谢谢@Thilo。我已经把主键从表中去掉了,因为我读到有一个主键会增加插入的时间。您是否建议我使用PK并在发现重复数据时捕获错误?使用PK确实会减慢插入速度,但如果您不确定数据是否唯一,则需要进行约束验证。所以,是的,把它放回去。你可以试试
derby
等效的
UPSERT
。你好,蒂洛。我已经试过了,但是当我执行批插入时,它会抛出一个BatchUpdateException,因为它违反了unique或primary key约束。我可以捕捉到错误,但此时它将不再处理任何记录。这就是我所做的,性能确实有所提高。谢谢