gpt4 book ai didi

sql - 为什么 count(1)、count(column) 和 count(*) 的成本相同?

转载 作者:行者123 更新时间:2023-12-01 21:43:17 26 4
gpt4 key购买 nike

为什么三个查询的成本相同?我想至少应该有一个更快。否则,只使用关键字 COUNT() 而不是 COUNT(parameter) 就可以了。

例如,以下是不依赖于参数的 COUNT() 示例实现:

while(!end of table){
while(!end of record){
read byte;
}
add 1 on a count register;
}

查询1:

select column, COUNT(1) 
from table
group by column

查询2:

select column, COUNT(column) 
from table
group by column

查询3:

select column, COUNT(*) 
from table
group by column

最佳答案

严格来说,它们的成本并不相同。 count(1)count(*)应该优化为相同的东西。 count(<column>)需要将列值与 NULL 进行比较,产生轻微的开销。

它们基本上相同的原因有两个。首先,运行查询的过程由两个阶段组成:编译/优化和执行。 SQL 编译器/优化器足够聪明,知道 count(1)count(*)是同一件事(至少对于大多数数据库而言)。

第二个原因是查询时间通常主要由从表中获取记录的 I/O 时间决定——特别是对于简单查询。因此,将列值与 NULL 进行比较的开销与执行引擎必须做的其他事情相比,可以忽略不计。

关于sql - 为什么 count(1)、count(column) 和 count(*) 的成本相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25111015/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com