Re: Improving performance of select query

From: Rob Sargent <robjsargent(at)gmail(dot)com>
To: Thomas Kellerer <shammat(at)gmx(dot)net>
Cc: pgsql-general(at)lists(dot)postgresql(dot)org
Subject: Re: Improving performance of select query
Date: 2020-12-14 16:36:45
Message-ID: 93B14ED6-5AD1-4427-AED6-A4B80D27DD15@gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

> On Dec 14, 2020, at 4:47 AM, Thomas Kellerer <shammat(at)gmx(dot)net> wrote:
>
> Karthik Shivashankar schrieb am 14.12.2020 um 12:38:
>> I have a postgres(v9.5) table named customer holding 1 billion rows.
>> It is not partitioned but it has an index against the primary key
>> (integer). I need to keep a very few records (say, about 10k rows)
>> and remove everything else.
>>
>> /insert into customer_backup select * from customer where customer_id in (<id1>,<id2>,..); /
>>
>>
>>
>> If I go for something like above I'm afraid the insert-select may take a very long time as when I ran
>>
>> /select count(*) from customer;/
>>
>> it is taking about 45 minutes to return the count.
>
> Well, you need to compare the time with the same condition you use in your
> CREATE TABLE .. AS SELECT statement,
>
> e.g.:
>
> select count(*)
> from customer
> where id in (....);
>
> Or:
>
> explain (analyze)
> select *
> from customer
> where id in (....);
>
>
> Regards
> Thomas
>
As for the actually copy of the specific records, I would ‘where exists’ (even possibly with a temp table of ids) rather than in(id1..id10000)

>

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Muhammad Bilal Jamil 2020-12-14 17:37:01 Re: Improving performance of select query
Previous Message Adrian Klaver 2020-12-14 15:24:55 Re: Dynamic procedure execution