performance - PostgreSQL 中的缓慢插入

标签 performance postgresql insert

在表中执行 INSERT 时遇到问题。

表结构为:

uri (varchar 10000) PK
id_language (varchar 10) PK
id_category (int4) PK
id_data (varchar 50) PK
id_ordinal (int4) PK (this field have a trigger to auto increment)
n_text (text)

当我运行此函数执行 900000 次插入时,它运行良好且速度很快:

CREATE OR REPLACE FUNCTION doInserts() RETURNS integer AS
$BODY$
DECLARE
   i integer;
BEGIN
       i := 1;

       while i <= 900000 loop
               insert into tdir_uris_text (uri, id_language, id_category, id_data, n_text) values ('http://localhos/teste' || i, 'PORT', '2', 'pagetitle', 'Pagina teste ' || i);

               i := i + 1;
       end loop;
   RETURN i;
END
$BODY$
LANGUAGE 'plpgsql' ;

但是当我用 100000 个 INSERT 执行此操作时,它似乎永远不会结束 INSERT 的操作,现在在 5 点运行...

CREATE OR REPLACE FUNCTION doInserts() RETURNS integer AS
$BODY$
DECLARE
   i integer;
BEGIN
       i := 1;

       while i <= 100000 loop
               insert into tdir_uris_text (uri, id_language, id_category, id_data, n_text) values ('http://localhos/teste' || i, 'PORT', '2', 'pagetitle', 'Pagina teste ' || i);
               insert into tdir_uris_text (uri, id_language, id_category, id_data, n_text) values ('http://localhos/teste' || i, 'PORT', '2', 'country_ad', 'italy');
               insert into tdir_uris_text (uri, id_language, id_category, id_data, n_text) values ('http://localhos/teste' || i, 'PORT', '2', 'services_available', 'service 1');
               insert into tdir_uris_text (uri, id_language, id_category, id_data, n_text) values ('http://localhos/teste' || i, 'PORT', '2', 'services_available', 'service 2');

               i := i + 1;
       end loop;
   RETURN i;
END
$BODY$
LANGUAGE 'plpgsql' ;

这可能是什么问题?有什么线索吗?可能是按键问题?

更多信息。插入 900000 个寄存器后,我使用“DELETE FROM”删除寄存器,然后运行仅插入 100000 个寄存器的函数

最好的问候,

最佳答案

使用序列而不是触发器。每次测试时,确保截断而不是删除。

关于performance - PostgreSQL 中的缓慢插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4923816/

相关文章:

performance - 处理 OpenGL 中的 alpha 混合以获得更好的性能

iphone - 使用 CGContextDrawLinearGradient 时如何优化 UITableViewCell 渲染

sql - json在sql中提取多级值

php - 使用 LEFT JOIN 通过 Form 插入 MySQL

performance - Neo4j 匹配/检索查询花费太多时间 25 秒

sql - 来自 Postgres 存储过程的意外 OUT 值

postgresql - 查找 Postgres 表的副本标识

php - 像 ñ á é í ó ú 这样的特殊字符会作为 ??? 导入。在MySQL中

php - 如何查看 mysql 是否替换或插入我的查询

mysql - 如何在 Laravel 中更新多个列及其各自的值?