(代表雪花用户提交)
问题: 为什么筛选器或搜索键(在where子句中使用的键)比按键排序或按键分组更好的群集键选择。
一种资源建议阅读: https://support.snowflake.net/s/article/case-study-how-clustering-can-improve-your-query-performance
另一个资源提到:
查询过滤器的性能会更好,因为对数据进行了排序,它将跳过所有不需要的行。
对于具有查询过滤器的场景,该查询过滤器不是排序顺序的一部分,而是group by和order by的列是数据排序顺序的一部分(聚集键),选择这些数据可能需要一些时间,但排序因为数据已经是有序的,所以会很容易。
第三种资源状态:
当您只选择表中全部数据的一小部分时,集群键对于WHERE子句很重要,因为它可以减少必须从Storage into the Compute读取的数据量当优化器可以为Query Pruning使用聚类密钥时。
您也可以使用聚类键来优化表插入,还可以查询输出(例如排序顺序)。
您的选择应取决于您的优先级,除非上面有一个关键内容,否则无法治愈所有问题。
用户回答以下问题的答案:
如果我总是按检索顺序插入行,是否还需要创建集群键?例如,如果始终使用date_timestamp查询表,并且如果我确保按date_timestamp按表顺序插入表,是否还需要在date_timestamp上创建集群键?
有什么想法,建议等吗?谢谢!
答案 0 :(得分:2)
用于基于FILTER / GROUP / SORT选择群集密钥。第一个“资源”是正确的。 如果筛选器将导致修剪,那么可能是最好的选择(以便可以跳过数据。)如果必须读取所有/大部分数据,则在GROUP / SORT键上进行群集可能会很快(因此花费的时间更少)重新排序)These docs状态:
通常,当查询过滤或 按表的聚类键排序。排序通常用于 ORDER BY操作,GROUP BY操作以及某些联接。
对于第二个有关自然集群的问题,在那种情况下定义集群密钥几乎没有或没有性能优势。