Subject: Re: A way to optimize sql about the last temporary-related row

From: Ron Johnson <[email-masked]>
Date: Thu, 27 Jun 2024 11:27:40 -0400

On Thu, Jun 27, 2024 at 11:20 AM [email-masked] <[email-masked]>
wrote:
[snip]

> -- insert 4M records
> insert into test_table(pk_id) select generate_series(1,4000000,1);
>
> -- now set some random data, distribuited between specific ranges (as in
> my production table)
> update test_table set
> datetime_field_1 = timestamp '2000-01-01 00:00:00' + random() *
> (timestamp '2024-05-31 23:59:59' - timestamp '2000-01-01 00:00:00'),
> integer_field_1 = floor(random() * (6-1+1) + 1)::int,
> integer_field_2 = floor(random() * (200000-1+1) + 1)::int;
>
>
> -- indexes
> CREATE INDEX idx_test_table_integer_field_1 ON test_table(integer_field_1);
> CREATE INDEX xtest_table_datetime_field_1 ON test_table(datetime_field_1
> desc);
> CREATE INDEX idx_test_table_integer_field_2 ON test_table(integer_field_2);
>
>
Off-topic: save some resources by vacuuming before creating indices.

---

From: "[email-masked]" <[email-masked]>
Date: Thu, 27 Jun 2024 17:33:13 +0200

Hi,

You are right. Too quickly copy-paste on my part :-)

I take this opportunity to add a NOT insignificant detail.

Before executing the select query I clear the cache:

systemctl stop postgresql-16 && sync && echo 3 > 
/proc/sys/vm/drop_caches  &&  systemctl start postgresql-16

I need to get a performance result even if data is not in cache.

My best regards,

Agharta

Il 27/06/24 5:27 PM, Ron Johnson ha scritto:
> On Thu, Jun 27, 2024 at 11:20 AM [email-masked] 
> <[email-masked]> wrote:
> [snip]
>
>     -- insert 4M records

---

From: Ron Johnson <[email-masked]>
Date: Thu, 27 Jun 2024 11:43:47 -0400

On Thu, Jun 27, 2024 at 11:33 AM [email-masked] <[email-masked]>
wrote:

> systemctl stop postgresql-16 && sync && echo 3 > /proc/sys/vm/drop_caches
> &&  systemctl start postgresql-16
>

In addition to David's suggestion, consider the pg_prewarm extension:
https://www.postgresql.org/docs/current/pgprewarm.html