Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.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
SQL插入在达到某个阈值时使用ADO减慢速度_Sql_Sql Server_Delphi - Fatal编程技术网

SQL插入在达到某个阈值时使用ADO减慢速度

SQL插入在达到某个阈值时使用ADO减慢速度,sql,sql-server,delphi,Sql,Sql Server,Delphi,我使用ADO启动此查询: INSERT INTO mytable (a,b) VALUES (1,a) ,(2,b) .. ,(900,zzz) 我首先将它放在一个stringlist中,然后使用adokery.SQL.Text:=sl.Text一次性将其全部放在querycomponent中。 这将一次插入900条记录。我使用它来加速在数据库中插入数据。我可以将其扩展到100000条记录,这将在大约4秒钟内完成。但是,当我尝试20万张唱片时,突然花了很长时间。我使用了queryanalyze

我使用ADO启动此查询:

INSERT INTO mytable (a,b) VALUES
(1,a)
,(2,b)
..
,(900,zzz)
我首先将它放在一个stringlist中,然后使用adokery.SQL.Text:=sl.Text一次性将其全部放在querycomponent中。 这将一次插入900条记录。我使用它来加速在数据库中插入数据。我可以将其扩展到100000条记录,这将在大约4秒钟内完成。但是,当我尝试20万张唱片时,突然花了很长时间。我使用了queryanalyzer,它突然慢下来,变成了爬行,每个查询需要1-2秒才能启动。当插入大约150000条记录时,就会发生这种情况。是否可以对ADO或SQL server进行设置以保持速度


我使用MS SQL数据库。

数据库的自动增长设置是什么?我认为这个问题来自插入日志记录和日志文件增长。尝试与(TABLOCK)一起使用。此外,您还可以将语句拆分为多个插入项,在一个事务中最多可包含10万条记录。插入后可能会重新生成索引吗?对于interbase/firebird,常见的主题是在大规模插入之前取消激活所有受影响表上的所有索引(所有表也可以使用eb触发器),提交数据,然后重新激活索引。因此,最后一步将花费大量的时间和空间对它们进行排序,但只执行一次。您还应该发布服务器配置、操作系统、RAM等。数据库永远不会“将所有内容存储在内存中”,否则停机会将其丢弃。数据库使用日志文件存储更改,直到提交更改为止。为了一次插入大量记录,通常会有一些ETL函数绕过一些标准查询处理。