2012-01-16 92 views
4

我是DBD :: SQLite,它使用perl在SQlite3 db中插入一些數據。使用Perl API使SQlite3插入更快

我注意到,插入(插入35k行)需要很多時間。 有什麼辦法可以讓它更快。

優化對我來說很重要,而不是數據同步。 我如何使用perl優化它?

請幫忙。

+1

你在做單行插入或批量插入嗎? – 2012-01-16 15:13:47

+0

目前正在做單行插入。 – kailash19 2012-01-16 15:16:48

+0

Perl是一個API嗎?你什麼意思? – Zaid 2012-01-16 15:36:39

回答

9

嘗試做你插入前執行該語句:

PRAGMA synchronous = OFF 

見SQLite的文檔more information

另外,正如Ilion所說,嘗試僅使用prepare()該聲明,然後用不同的綁定值重新​​多次。關閉AutoCommit,然後明確提交每插入N行也可能有所幫助,對於某些N值。

+2

也有一個足夠新的SQLite,PRAGMA journal_mode = WAL(如果你真的不關心數據完整性,甚至是'= OFF') – derobert 2012-01-16 17:20:46

+0

除了'PRAGMA'技巧,所有這些相同的建議通常可以工作用於加速插入任何關係數據庫(MySQL,PostgreSQL等)。 – mpeters 2012-01-16 17:55:07

+0

謝謝約翰,我的插入性能大大提高。 – kailash19 2012-02-22 06:35:47

5

請確保您使用的是準備好的語句,因此它不必分析每個插入。也可以嘗試通過將它們包圍在Begin ... Commit as described in this FAQ來對插入語句進行分組。

1

確保您在連接上設置了AutoCommit => 0。 保證,在每批插入後明確提交。

+0

Thanks.I將嘗試您的建議並報告性能 – kailash19 2012-02-22 06:36:31

0

除了完全關閉自動提交之外,您還可以嘗試使用大型事務。通常,對單行插入有所不同。