我使用sp_execute_external_script在Microsoft .中运行一个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发布于 2017-11-20 11:43:22
从SQL本身调用SQL通常要快得多,因为它不需要任何上下文切换、不需要额外的解析和调用其他进程。
到目前为止,SQL执行引擎是经过优化的,其本身之外的每一步都比较慢。我可以想象这里也是如此。当然,一个小函数的开销比长期运行的函数要高得多,这可能会扭曲您的度量标准。
https://stackoverflow.com/questions/47391113
复制相似问题