Jay*_*awk 16 database sql-server performance r rodbc
我是R的新手,但我有兴趣使用Shiny来创建使用存储在SQL Server数据库中的数据的动态图表.为了实现交互性,我想从数据库中引入原始数据并在其中执行计算,R而不是让数据库汇总数据.
我能够使用RODBC,连接到数据库,执行查询,并在a中接收结果data.frame.但是,读取时间R比SQL Server Management Studio(SSMS)中执行的相同查询长约12倍.SSMS需要大约600毫秒,而R大约需要7.6秒.我的问题是我是做错了什么,还是R因为数据库访问速度很慢?如果是这样,是否有更快的替代方案(例如将数据库输出写入文件并读取文件)?
有关可能有用的查询的一些信息:查询检索大约250K行,包含4列.第一列是日期,其他三列是数值.机器运行R和SSMS是一个高端的Win 7工作站,具有32GB的内存.R我正在运行的命令是:
system.time(df <- sqlQuery(cn, query))
Run Code Online (Sandbox Code Playgroud)
返回:
user system elapsed
7.17 0.01 7.58
Run Code Online (Sandbox Code Playgroud)
有趣的是,似乎从SQL到我的机器的数据传输速度很快,但是R在返回之前,这是忙于内部工作几秒钟data.frame.我看到这一点,因为网络利用率在第一秒激增并几乎立即返回到接近0.然后几秒钟后,R data.frame返回.
小智 14
我会尝试RJDBC http://cran.r-project.org/web/packages/RJDBC/RJDBC.pdf
使用这些驱动程序https://msdn.microsoft.com/en-us/sqlserver/aa937724.aspx
library(RJDBC)
drv <- JDBC("com.microsoft.sqlserver.jdbc.SQLServerDriver","/sqljdbc4.jar")
con <- dbConnect(drv, "jdbc:sqlserver://server.location", "username", "password")
dbGetQuery(con, "select column_name from table")
Run Code Online (Sandbox Code Playgroud)