首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CBO如何对雪花中的ORDER子句使用聚类键?

CBO如何对雪花中的ORDER子句使用聚类键?
EN

Stack Overflow用户
提问于 2022-09-21 13:41:12
回答 2查看 35关注 0票数 1

测试描述

测试的目的是了解CBO如何使用集群特性,通过使用聚集键的查询来运行订单。

假设与预条件

据雪花医生说:

https://docs.snowflake.com/en/user-guide/tables-clustering-keys.html

“当查询在表的群集键上筛选或排序时,查询受益于群集。排序通常用于按操作排序、按操作分组排序和对某些联接排序。“

按照它,如果在集群键上执行ORDER子句,优化器将以某种方式使用它来提高查询性能。

测试数据

用于此测试的数据是来自雪花sample_data (共享)的订单表。

“SAMPLE_DATA”,“TPCH_SF1000”,“ORDERS”

要执行的步骤

  1. 在拥有的数据库中创建一个具有ORDERS表属性的新表,并复制所有值;

创建像“SAMPLE_DATA”、“TPCH_SF1000”、“ORDERS”这样的表订单;插入订单选择*从“SAMPLE_DATA”。“TPCH_SF1000”。“ORDERS”;

  1. 移除orders表上的群集键集:

更改表顺序,删除聚类键;

  1. 将ORDERS_NEW (日期)转换为数字后,创建一个新列O_ORDERDATE (数字10,0)。

ALTER添加列ORDERS_NEW编号(10,0);更新命令集ORDERS_NEW =TO_NUMBER(TO_VARCHAR(O_ORDERDATE),‘-’);

新表的布局

  1. 使用ORDERS_NEW列对表进行群集

通过(ORDERS_NEW)更改表订单集群;更改表订单恢复RECLUSTER;

  1. 使用对聚类键上的ORDER子句进行解释的方法检测到逻辑执行计划(在本例中为: ORDERS_NEW)

由ORDERS_NEW解释SELECT * FROM订单;

预期结果

因为在使用表上的聚类键后,它应该是预先排序的,因此期望它不需要在执行时排序。

即使排序与执行计划一致,它也应该使用集群特性,正如文档中以某种方式定义的那样,以提高查询性能。

实际结果

逻辑执行计划使用群集表上的排序操作,这使得ORDER子句的群集特性变得冗余。

解释查询结果

结论与讨论--

与预期结果和实际结果相比,它不能满足雪花所规定的功能。

通过这个,我将讨论为什么雪花不使用集群键?在什么情况下会这样做呢?

EN

回答 2

Stack Overflow用户

发布于 2022-09-21 13:48:48

为什么雪花不使用群集键?

  • 因为查询优化器确定它不需要

在什么情况下会这样做呢?

  • 当查询优化器确定使用群集键将是有益的
票数 0
EN

Stack Overflow用户

发布于 2022-09-21 14:17:12

因为在使用表上的聚类键之后,它应该被预先排序.

整理与分类不一样。插入排序行是强制重新聚类的一种方法,但两者并不相同。

...the的期望是它不需要在执行时排序。

雪花不以这种方式在内部存储表的数据。如果通过应用于查询运行带有订单的查询,则结果集缓存中的结果将按排序顺序存储。然而,由微分区支持的表并不是这样存储的。

...Why没有使用集群密钥吗?

雪花确实以多种不同的方式使用聚类键。最常见的方法是自动重新聚类服务在后台透明地运行,以重新集群微分区中的行。其目标是在每个微分区中有效地最小化聚类键的最小和最大值之间的差异。在本例中,它还使用DML中的排序进行应用。另外,对于一些DML操作,它将尝试在DML产生的行上保留集群。

目前,优化器不使用(或需要使用)群集键。相反,在微分区上压缩MIN/MAX范围将提高性能。优化器将把所有符合条件的过滤器推倒到表扫描中,以进行分区剪枝。聚合可以使这更有效,但是不管是否已经完成重新聚类,优化器都会这样做。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73801788

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档