前段时间我写了这个问题,因为我认为查询太慢了,但经过多次试验和错误后,我发现问题是 R 中的数据摄取。这个查询现在需要 2 秒来检索大约 175000 行,但是当它运行时R,通过 input_data_1 大约需要 15 秒。执行计划告诉它是表扫描需要 100%,但我不明白为什么会有这样的差异。
任何帮助表示赞赏。
编辑
这是以防万一的代码。这与没有处理的查询相同。我只是返回已读的内容:
EXEC sp_execute_external_script
@input_data_1 = N'SELECT DEPARTMENT, ACCOUNT, CATEGORY, YEAR, MONTH, CURRENCY,
DIM1, DIM2, DIM3, DIM4, DIM5, VALUE
from DATA
where YEAR = ''2013bdg''',
@input_data_1_name=N't',
@language = N'R',
@script = N'OutputDataSet <- as.data.frame(t);'
WITH RESULT SETS (([DEPARTMENT] VARCHAR (MAX), [ACCOUNT] VARCHAR (MAX), [CATEGORY] VARCHAR (MAX),
[YEAR] VARCHAR (MAX), [MONTH] VARCHAR (MAX), [CURRENCY] VARCHAR (MAX),
[DIM1] VARCHAR (MAX), [DIM2] VARCHAR (MAX), [DIM3] VARCHAR (MAX),
[DIM4] VARCHAR (MAX), [DIM5] VARCHAR (MAX), [VALUE] FLOAT));
GO
编辑#2
通过反复试验,我发现缓慢是由于WITH RESULT SETS
操作员造成的。我使用的(12 列)非常昂贵,而如果我将其设置为:
WITH RESULT SETS (( OK BIT not null))
只需 3 秒。
为什么会发生这种情况是个问题。