| From: | yudhi s <learnerdatabase99(at)gmail(dot)com> |
|---|---|
| To: | Adrian Klaver <adrian(dot)klaver(at)aklaver(dot)com> |
| Cc: | Ron Johnson <ronljohnsonjr(at)gmail(dot)com>, "pgsql-generallists(dot)postgresql(dot)org" <pgsql-general(at)lists(dot)postgresql(dot)org> |
| Subject: | Re: Top -N Query performance issue and high CPU usage |
| Date: | 2026-02-03 18:50:20 |
| Message-ID: | CAEzWdqeSoEy=_67u1i2vvE8Jk7+hQdyeuTYxaRDWm3+ghLe2gw@mail.gmail.com |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-general |
On Tue, 3 Feb, 2026, 9:37 pm Adrian Klaver, <adrian(dot)klaver(at)aklaver(dot)com>
wrote:
> On 2/3/26 07:59, Ron Johnson wrote:
>
> >
> >
> > There is no VARCHAR or CHAR; there is only TEXT. Thus, this is 100%
> > expected and normal.
>
> What Ron is saying is that there are varchar and char types, but they
> boil down to text per:
>
> https://www.postgresql.org/docs/current/datatype-character.html
>
> "text is PostgreSQL's native string data type, in that most built-in
> functions operating on strings are declared to take or return text not
> character varying. For many purposes, character varying acts as though
> it were a domain over text."
>
> As to performance see:
>
> "
> Tip
>
> There is no performance difference among these three types, apart from
> increased storage space when using the blank-padded type, and a few
> extra CPU cycles to check the length when storing into a
> length-constrained column. While character(n) has performance advantages
> in some other database systems, there is no such advantage in
> PostgreSQL; in fact character(n) is usually the slowest of the three
> because of its additional storage costs. In most situations text or
> character varying should be used instead.
> "
>
Thank you. I was looking into those casting(::text) in the explain plan
output in similar way (as it was happening for int8 to numeric join
scenario) and was thinking, may be it's spending some cpu cycles on doing
these ::text casting behind the scenes for that column and if there is
someway(data type change) to stop those. But from your explanation, it
looks like those representation in the query plan is normal and have no
performance overhead as such. Thanks again.
In regards to the below, "nested loop" having response time of 100ms. I
understand, here the casting function us now removed after changing the
data type of columns to match in both side of the join.
So, is this expected to do a nested loop on 500k rows to take 100ms?
-> Nested Loop (cost=262.77..1342550.91 rows=579149 width=20) (*actual
time=6.406..107.946* rows=1049 loops=1)
Join Filter: (*df.ent_id = m.ent_id*)
Rows Removed by Join Filter: 514648
Buffers: shared hit=1972
Regards
Yudhi
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Ron Johnson | 2026-02-03 20:51:44 | Re: Top -N Query performance issue and high CPU usage |
| Previous Message | Florents Tselai | 2026-02-03 16:40:49 | Re: Emitting JSON to file using COPY TO |