From: | Rick Otten <rottenwindfish(at)gmail(dot)com> |
---|---|
To: | Semen Yefimenko <semen(dot)yefimenko(at)gmail(dot)com> |
Cc: | pgsql-performance(at)lists(dot)postgresql(dot)org |
Subject: | Re: Very slow Query compared to Oracle / SQL - Server |
Date: | 2021-05-07 12:50:08 |
Message-ID: | CAMAYy4JJx7UEBTRBWvEKBqXfFzJPpKXswhK9enexhZGEcZ8oqg@mail.gmail.com |
Views: | Whole Thread | Raw Message | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-performance |
On Thu, May 6, 2021 at 10:38 AM Semen Yefimenko <semen(dot)yefimenko(at)gmail(dot)com>
wrote:
> Hi there,
>
> I've recently been involved in migrating our old system to SQL Server and
> then PostgreSQL. Everything has been working fine so far but now after
> executing our tests on Postgres, we saw a very slow running query on a
> large table in our database.
> I have tried asking on other platforms but no one has been able to give me
> a satisfying answer.
> ...
>
> SELECT column1,..., column54 where ((entrytype = 4000 or entrytype = 4001
> or entrytype = 4002) and (archivestatus <= 1)) order by timestampcol desc;
>
>
>
I know several people have suggested using `IN` to replace the or
statements, that would be my first go-to also. Another approach I have
found helpful is to keep in mind whenever you have an `OR` in a where
clause it can be replaced with a `UNION ALL`. Usually the `UNION ALL` is
faster.
I recommend avoiding `OR` in where clauses as much as possible. -
Sometimes it can't be helped, especially if you need an exclusive or, but
most of the time there is another way that is usually better.
Another thought is "archivestatus" really a boolean or does it have
multiple states? If it is actually a boolean, then can you change the
column data type?
From | Date | Subject | |
---|---|---|---|
Next Message | Semen Yefimenko | 2021-05-07 15:57:19 | Re: Very slow Query compared to Oracle / SQL - Server |
Previous Message | Vijaykumar Jain | 2021-05-07 09:55:58 | Re: Very slow Query compared to Oracle / SQL - Server |