我困惑为什么一个简单的查询通过RPostgreSQL
执行时会花费这么长时间,却几乎可以通过另一个客户端立即完成。我有一个Postgresql数据库ncol = 500
和nrow = 100
。我想通过dbReadTable
函数将整个数据库读入一个数据帧集中。如果失败,即使通过dbGetQuery
读取一行也没问题。
library(RPostgreSQL)
drv = dbDriver("PostgreSQL")
con = dbConnect(drv, dbname = "MYDBNAME", host = "MYHOST",
port = 5432, user = "MYUSER", password = "MYPASSWORD")
before = Sys.time()
res = dbGetQuery(con, "SELECT * FROM detailed WHERE project_code='ABCD1234' LIMIT 1;")
after = Sys.time()
before2 = Sys.time()
res2 = dbReadTable(con, "detailed")
after2 = Sys.time()
dbDisconnect(con) # Close PostgreSQL connection
ellapsed = after - before
ellapsed2 = after2-before2
ellapsed
> Time difference of 50.31242 secs
ellapsed2
> Time difference of 50.38002 secs
但是,我可以在0.5秒内通过另一个客户端运行SELECT * FROM detailed;
。
为什么此查询需要这么长时间才能运行?我该怎么做才能加快速度?这可能是RPostgreSQL
的Postgres驱动程序问题吗?