Re: Improving performance of select query
От | Rob Sargent |
---|---|
Тема | Re: Improving performance of select query |
Дата | |
Msg-id | 93B14ED6-5AD1-4427-AED6-A4B80D27DD15@gmail.com обсуждение исходный текст |
Ответ на | Re: Improving performance of select query (Thomas Kellerer <shammat@gmx.net>) |
Ответы |
Re: Improving performance of select query
|
Список | pgsql-general |
> On Dec 14, 2020, at 4:47 AM, Thomas Kellerer <shammat@gmx.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) ratherthan in(id1..id10000) >
В списке pgsql-general по дате отправления: