dbplyr绕过索引并运行顺序扫描

dbplyr绕过索引并运行顺序扫描,r,postgresql,dplyr,odbc,R,Postgresql,Dplyr,Odbc,当连接到PostgreSQL时,我在dbplyr性能方面有一个特别的问题 在使用不同的软件包(RPostgres、RPostreSQL和odbc)进行测试后,后者总结了性能问题 这是特定于dbplyr的,不会与dbGetQuery一起出现 以下是我使用的步骤 步骤1:连接 步骤3:使用dbGetQuery运行查询 这很快,只需不到2秒钟。我还检查了它是否使用了索引(使用EXPLAIN ANALYZE测试) 请为两者共享EXPLAIN ANALYZE输出,这样我们就可以知道发生了什么请为两者共享E

当连接到PostgreSQL时,我在
dbplyr
性能方面有一个特别的问题

在使用不同的软件包(
RPostgres
RPostreSQL
odbc
)进行测试后,后者总结了性能问题

这是特定于
dbplyr
的,不会与
dbGetQuery
一起出现

以下是我使用的步骤

步骤1:连接 步骤3:使用dbGetQuery运行查询 这很快,只需不到2秒钟。我还检查了它是否使用了索引(使用
EXPLAIN ANALYZE
测试)


请为两者共享
EXPLAIN ANALYZE
输出,这样我们就可以知道发生了什么请为两者共享
EXPLAIN ANALYZE
输出,这样我们就可以知道发生了什么
odbc_driver <- if (.Platform$OS.type == "windows") {
  "PostgreSQL Unicode(x64)"
} else {
  "PostgreSQL Unicode"
}

con <- DBI::dbConnect(
  odbc::odbc(),
  Driver = odbc_driver,
  Server = pikachu_ip,
  Database = pikachu_db,
  UID = pikachu_user,
  PWD = pikachu_password,
  Port = 5432
)
library(dplyr)
library(dbplyr)

tbl(con, in_schema("pikachu", "stock")) %>% 
  filter(month == 201305) %>% 
  group_by(product) %>% 
  count() %>% 
  collect()
odbc::dbGetQuery(con,
  'SELECT "product", COUNT(*) AS "n"
  FROM pikachu.stock
  WHERE ("month" = 201305)
  GROUP BY "product"'
)