在Snowflake文档中,我找不到使用索引的引用。
Snowflake是否支持索引,如果不支持,使用Snowflake时性能调整的替代方法是什么?
答案 0 :(得分:5)
Snowflake不支持索引,尽管它支持“群集”以提高I / O的性能。
我建议阅读以下链接以熟悉此内容:
https://docs.snowflake.net/manuals/user-guide/tables-clustering-keys.html
https://docs.snowflake.net/manuals/user-guide/tables-auto-reclustering.html
以下是关于该主题的非常好的博客文章: https://www.snowflake.com/blog/automatic-query-optimization-no-tuning/
希望这对您有帮助...丰富
答案 1 :(得分:4)
没有雪花没有索引。它消除了不必要的扫描,从而提高了性能,从而实现了我在每个微分区中维护丰富的元数据的能力。例如,如果查询中有一个时间过滤器,并且您的表或多或少按时间排序,则Snowflake可以“删减”与查询无关的表部分。
话虽如此,Snowflake一直在发布新功能,其中一个功能就是Search Optimisation Service,它使您可以对启用的选定列执行“干草堆中的针”查询。您可以创建的索引不是很多,但是可能在后台使用了类似的索引。
答案 2 :(得分:3)
雪花不使用索引。这是使Snowflake能够很好地进行任意查询扩展的原因之一。相反,Snowflake会计算有关您加载的文件中的列和记录的统计信息,并使用这些统计信息来找出实际要执行查询的表/记录的哪些部分。它还使用列式存储文件格式,该格式仅读取表中包含实际使用的字段(列)的部分,从而减少了查询中未使用的列的I / O。
Snowflake将大表(千兆字节,太字节或更大)切成较小的“微分区”。对于每个微型分区,它收集有关每列包含哪些值范围的统计信息。然后,它仅加载包含查询所需范围内的值的微分区。例如,假设您有一列时间戳。如果您的查询要求在6月1日至7月1日之间提供数据,则基于微分区文件中存储的日期统计信息,将不会加载或处理不包含该范围内任何数据的分区。
索引通常用于在线事务处理,因为当您处理一条或几条记录时,它们会加速工作流程,但是当您对大型数据集运行分析查询时,几乎总是在联接和索引中使用每个表的大子集。聚集体。具有自动统计信息的存储机制可以自动加速如此大的查询,而无需您指定索引或调整任何类型的参数。
答案 3 :(得分:3)
否,Snowflake不支持索引。而且不要让他们告诉你这是一个优势。 可以如上所述进行性能调整,但通常是用钱完成的:购买更大的仓库。
答案 4 :(得分:1)
Snowflake不支持索引,它会将数据保留在微分区中,或者换句话说,它会破坏小文件中的数据集,并将行格式化为列并进行压缩。服务层中的Snowflake元数据管理器将具有有关每个微分区的所有信息,例如哪个分区具有哪些数据。 每个分区的标头中都会包含有关自身的信息,例如最大值,最小值,基数等。与常规数据库相比,索引要好得多。