Snowflake cloud data platform 计数(*)与雪花中的计数(列)性能

Snowflake cloud data platform 计数(*)与雪花中的计数(列)性能,snowflake-cloud-data-platform,Snowflake Cloud Data Platform,因为SnowFlake是一个列数据库,所以使用COUNT(*)vs COUNT(column)时会影响性能吗?这是假设您所引用的列没有任何空值count(column)的理论开销是数据库需要检查每一行的值是否真的不是空值,这在count(*)中是不必要的 使用count(*)数据库还可以自由选择任何索引以加快计数,而使用count(column)则强制执行检查所有值,而不是使用主键索引等 一个好的优化器可能会使两个版本执行相同的操作(前提是存在NOT NULL约束),但count(*)会让它有更

因为SnowFlake是一个列数据库,所以使用COUNT(*)vs COUNT(column)时会影响性能吗?这是假设您所引用的列没有任何空值

count(column)
的理论开销是数据库需要检查每一行的值是否真的不是空值,这在
count(*)中是不必要的

使用
count(*)
数据库还可以自由选择任何索引以加快计数,而使用
count(column)
强制执行检查所有值,而不是使用主键索引等

一个好的优化器可能会使两个版本执行相同的操作(前提是存在
NOT NULL
约束),但
count(*)
会让它有更多的可能性。

count(column)
的理论开销是数据库需要检查每一行的值是否真的不是NULL,对于
count(*)
,这是不必要的

使用
count(*)
数据库还可以自由选择任何索引以加快计数,而使用
count(column)
强制执行检查所有值,而不是使用主键索引等


一个好的优化器可能会使两个版本执行相同的操作(前提是存在
notnull
约束),但是
count(*)
会让它有更多的可能性。

正如一个没有名称的\u horse\u解释的那样,这两个函数是不同的,但是您已经提到了列没有空值。因此,在您的案例中,它们应该返回相同的结果

更重要的是,雪花有一个特殊的计数函数优化。在我看来,如果使用COUNT(*)或COUNT(column),即使列包含空值,它也不会影响性能!对于这两种情况,Snowflake都使用元数据统计信息,因此它实际上不计算行数

您可以使用雪花样本数据对其进行测试:

select count(*) from snowflake_sample_data.TPCH_SF1000.LINEITEM;
-- 5999989709

select count(L_ORDERKEY) from snowflake_sample_data.TPCH_SF1000.LINEITEM;
-- 5999989709

这两个查询都将立即返回结果,尽管表大小约为170G,并且包含的行数超过5G。

作为带有\u no \u名称的\u horse\u解释,这两个函数不同,但您已经提到该列没有空值。因此,在您的案例中,它们应该返回相同的结果

更重要的是,雪花有一个特殊的计数函数优化。在我看来,如果使用COUNT(*)或COUNT(column),即使列包含空值,它也不会影响性能!对于这两种情况,Snowflake都使用元数据统计信息,因此它实际上不计算行数

您可以使用雪花样本数据对其进行测试:

select count(*) from snowflake_sample_data.TPCH_SF1000.LINEITEM;
-- 5999989709

select count(L_ORDERKEY) from snowflake_sample_data.TPCH_SF1000.LINEITEM;
-- 5999989709

这两个查询都将立即返回结果,尽管表大小约为170G,并且包含超过5G行。

count(*)
count(column)
正在做两件不同的事情。除非将列定义为非空,否则不能将一个替换为另一个。如果列定义为非空为真,是否有理由选择一个。除非
被定义为非空,否则不能将一个替换为另一个如果列被定义为非空为真,是否有理由选择其中一个?