我有一个简单的查询,它使用两个字段构成GROUP BY:
@facturas =
SELECT a.CodFactura,
Convert.ToInt32(a.Fecha.ToString("yyyyMMdd")) AS DateKey,
SUM(a.Consumo) AS Consumo
FROM @table_facturas AS a
GROUP BY a.CodFactura, a.DateKey;
@table_facturas有4100行,但查询需要几分钟才能完成。看到图形浏览器,我看到它使用2500个顶点,因为我有2500个CodFactura + DateKey唯一行。我不知道它是否是正常的ADAL行为。有没有办法减少顶点数并更快地执行此查询?
答案 0 :(得分:0)
首先:我不确定你的查询是否真的会编译。您需要在GROUP BY
中使用转换表达式,或在之前的SELECT
语句中执行此操作。
其次:为了回答您的问题,我们需要知道如何定义完整查询。 @table_facturas
来自哪里?它是如何产生的?
如果没有这些信息,我只能做一些疯狂的推测猜测:
如果@table_facturas来自实际的U-SQL表,那么您的表将被分区/分段。这可能是因为:
您最初在分组列中插入了大量数据并且您有一个谓词可以减少每个分区的行数和/或您没有uptodate统计信息(运行CREATE STATISTICS
在列上。)
你做了很多INSERT
语句,每个语句都在表中插入少量行,从而创建了大量的单个文件。这将"横向扩展"处理也是如此。使用ALTER TABLE REBUILD
重新拼凑。
如果它来自文件集,则输入中可能包含太多小文件。看看你是否可以将它们合并到更小,更大的文件中。
如果通过添加OPTION(ROWCOUNT=4000)
上述内容无效,您还可以尝试在查询中提示创建@table_facturas的少量行。