On Sun, Jan 14, 2024 at 6:18 AM Yongtao Huang <yongtaoh2...@gmail.com> wrote:
> PostgreSQL version: 16.1 > Operating system: centos7 > Description: > > Let me show these explain results first, in PG9.4 and PG16.1. > > ### Behavior in PG9.4 > ``` SQL > gpadmin=# create table t1 (c1 int, c2 text); > CREATE TABLE > gpadmin=# explain (costs off, verbose) select distinct c1 from t1; > QUERY PLAN > ----------------------------- > HashAggregate > Output: c1 > Group Key: t1.c1 > -> Seq Scan on public.t1 > Output: c1 <---- pay attention <---- !!! > (5 rows) > ``` > > ### Behavior in PG 16.1 > ``` SQL > gpadmin=# create table t1 (c1 int, c2 text); > CREATE TABLE > gpadmin=# explain (costs off, verbose) select distinct c1 from t1; > QUERY PLAN > ----------------------------- > HashAggregate > Output: c1 > Group Key: t1.c1 > -> Seq Scan on public.t1 > Output: c1, c2 <---- pay attention <---- !!! > (5 rows) > ``` > > My question is why scan all columns in PG 16.01? > If `select distinct c1`, scan the column `c1` is enough, like PG 9.4. > You can't scan just one column of a row-oriented table. The real question is why it mentions c2.