与Oracle相比,将数据插入PostgreSQL中的临时表要慢得多

时间:2018-11-17 11:48:27

标签: oracle postgresql performance

我们的应用程序支持多个数据库,包括Oracle和PostgreSQL。在几个用例中,将运行多个查询以获取必要的数据。从一个或多个查询获得的数据将根据业务逻辑进行过滤,然后使用参数化的INSERT语句将过滤后的数据插入到临时表中。然后,此临时表在后续查询中与其他表联接。我们已经注意到,将数据插入临时表所需的时间随着PostgreSQL数据库插入的行数线性增加。此临时表只有一个15个字节大小的varchar列。插入80行需要16毫秒,160行需要32毫秒,280行需要63毫秒,依此类推。这些插入操作与Oracle数据库相同的操作大约需要1毫秒。

我们将PostgreSQL 10.4与psqlODBC驱动程序10.03版本一起使用。我们已根据PostgreSQL文档中提供的指南配置了temp_buffers(256MB),shared_buffers(8GB),work_mem(128MB)和maintenance_work_mem(512MB)参数。

我们还有其他配置选项可以尝试提高PostgreSQL数据库中临时表插入的性能吗?请提出建议。

1 个答案:

答案 0 :(得分:1)

您还没有真正确定临时表是问题所在。

例如,以下是对插入15个字符(当然与字节数不同)的varchar列的快速测试

=> CREATE TEMP TABLE tt (vc varchar(15)); CREATE TABLE => \timing on Timing is on. => INSERT INTO tt SELECT to_char(i, '0000000000') FROM generate_series(1,100) i; INSERT 0 100 Time: 0.758 ms

这是在我使用了几年的廉价旧笔记本电脑上。除非您在Raspberry Pi上运行PostgreSQL数据库,否则我认为临时表速度对您来说不是问题。