2011-02-28 8 views
12

我正在使用RSQLite包查詢本地SQLite數據庫,對於某些查詢,RSQLite接口速度很慢。通過RSqlite比sqlite3命令行界面SQLilte查詢要慢得多

作爲具體的例子,下面的查詢在一秒需要使用sqlite3的命令行實用程序來運行:

$ sqlite3 data/svn.db 
SQLite version 3.7.5 
Enter ".help" for instructions 
Enter SQL statements terminated with a ";" 
sqlite> select count(distinct svn_path.revision) FROM src INNER JOIN svn_path ON src.filename=svn_path.path; 
5039 

但R中的等效的查詢需要一點超過兩分鐘,並且使用100%的我的一個CPU:

> library(RSQLite) 
Loading required package: DBI 
> con <- dbConnect(SQLite(), dbname="data/svn.db") 
> dbGetQuery(con, "select count(distinct svn_path.revision) FROM src INNER JOIN svn_path ON src.filename=svn_path.path") 
    count(distinct svn_path.revision) 
1        5039 

爲什麼通過R接口的性能如此之慢?

請注意,我在Mac OS X 10.6.6上使用R64 2.10.1。

+0

是否確定查詢不僅僅是通過命令行運行時在服務器上緩存? – 2011-02-28 17:47:34

+6

@Daniel Dickison:SQLite沒有服務器。 – Benoit 2011-03-01 12:27:29

+1

也許RSQLite庫與shell(3.7.5)不是相同的引擎版本。 – Benoit 2011-03-01 12:28:34

回答

3

重要的是您擁有的RSQLite版本。你的R版本似乎已經超過一年了,所以如果你的RSQLite是老版本的,它可能是Benoit建議的老版本引擎(例如3.6.4)。