我有一个Vb.Net应用程序(VS2010)以及Postgres 9.3和psqlodbc版本9.3.4。我通过ODBCConnection和PostgreSQL odbc驱动程序与Postgres数据库进行交互。
将简单的事务性批量插入到数据库表中(没有索引或其他高科技的东西,只是普通的旧记录和一个串行列作为主键),即使在我的本地计算机上进行(即,app写入数据)也很慢到没有网络的本地postgres数据库)。 我已经看到每秒1000-1500行的速度。我的硬件是Win7 64位,Sata 6gbs硬盘,8GB内存。
根据Maxim Egorushkin在How to speed up insertion performance in PostgreSQL的帖子,他建议使用:
SQLSetConnectAttr(conn,SQL_ATTR_AUTOCOMMIT,reinterpret_cast(SQL_AUTOCOMMIT_OFF),0);
防止自动提交。我想知道你如何从.net调用这个子程序,因为它似乎是WIN API的一部分,因此" conn"变量可能是非.Net对象的句柄。
我确信这种方法或其他方法应该能够加快速度:显然,postgres的非自由PGNP ODBC驱动程序每秒可以执行10次1000次插入。
非常感谢有关如何禁用自动提交的输入。
答案 0 :(得分:2)
每次交易多次插入是不够的。 使用单个多行插入语句,如下所示:
INSERT INTO films (code, title, did, date_prod, kind)
VALUES
('B6717', 'Tampopo', 110, '1985-02-10', 'Comedy'),
('HG120', 'The Dinner Game', 140, DEFAULT, 'Comedy');
您可以放入1个插入的记录越多,它就越快。这有多种原因,其中一个原因是往返服务器 - 每个sql语句至少有一次往返,当你做了数千行时,这可能会导致性能下降。