dbplyr绕过索引并运行顺序扫描
当连接到PostgreSQL时,我在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
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"'
)