【发布时间】:2021-09-26 10:08:30
【问题描述】:
我有一个包含 5600 万行的表。
此表在从 KAFKA 加载流数据时每 5 分钟处理一次高负载的 UPSERTS。每次加载大约 200-500k 更新。
当我对其中一个时间戳列运行带有 ORDER BY 的 SELECT 时,需要 5-7 分钟才能返回结果。
我为该列尝试了 Cluster Key,但由于该表上的 DML 操作很高,并且列本身的基数很高,因此集群效率低且成本高。
到目前为止,唯一将查询时间显着减少到大约 15 秒的想法是将仓库大小从小增加到 X-Large。
我不相信唯一的解决方案是增加仓库规模。这里的任何建议都会很棒!
【问题讨论】:
-
ORDER BY 操作通常需要更大的仓库,因此它们有足够的空间进行分类。如果您没有按时间戳字段进行过滤,那么聚类不会帮助您进行排序操作。查看 SQL 配置文件以了解初始扫描是否花费您时间与排序。如果是这种情况,您是否看到大量溢出到远程存储?如果是这样,您需要一个更大的仓库。
-
您是否尝试“选择顺序”这 5600 万行?您对查询有限制吗?
-
我正在无限制地查询
select * from table order by date desc,但是,我认为 DataGrip 自动将查询限制为 500。我检查了查询计划,排序是最昂贵的操作,有很多溢出到远程贮存。表中还有 40 列。显着减少查询执行时间的因素是限制结果、选择中的列和更大的仓库。谢谢!
标签: query-optimization snowflake-cloud-data-platform clustering-key