我正在使用sp_execute_external_script
在Microsoft R中运行R脚本。我从C#调用它。但是我发现了这个问题,虽然它并不复杂,但它只能在6000行或多或少的情况下工作,需要7秒才能完成。因此我将脚本翻译为纯 SQL ,只需2-3秒(也来自C#)。所以,我检查了如下所示的性能,整个SP平均持续1.877秒,R脚本1.56(system.time
)。所以我的问题是为什么会有这样的差异?老实说,我不明白为什么SQL应该没有那么多差异那么快。
declare @start datetime = getdate()
EXEC sp_execute_external_script
@input_data_1 = N'select * from table' -- only 6000 rows approx.
@name = N't',
@params = N'',
@rscript = N'
# my R script
OutputDataSet <- data.frame(field1, field2)
'
declare @executionTimeInMilliseconds int = datediff(ms, @start, getdate())
print @executionTimeInMilliseconds
答案 0 :(得分:1)
从SQL本身调用SQL通常要快得多,因为它不需要任何上下文切换,也不需要额外的解析和调用其他进程。
到目前为止,SQL执行引擎已经过优化,以至于它自身以外的每一步都会变慢。我可以想象这也是这种情况。当然,小功能的开销远远高于长时间运行的功能,这可能会使您的指标出现偏差。