Re: Adding LIMIT changes PostgreSQL plan from good to a bad one

From: Michael Lewis <mlewis(at)entrata(dot)com>
To: Michael Korbakov <rmihael(at)gmail(dot)com>
Cc: pgsql-general <pgsql-general(at)postgresql(dot)org>
Subject: Re: Adding LIMIT changes PostgreSQL plan from good to a bad one
Date: 2019-11-22 18:28:12
Message-ID: CAHOFxGo8Mh=jw2zsnTfn6EDS-eP9dGotF3+k1LL6K1FkS-=FPA@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

I try to avoid DISTINCT and use GROUP BY when feasible, as well as avoiding
OR condition. If you combined anon1 and anon2 with UNION ALL, and did
(inner) join instead of left, or even moved all of that to EXISTS, perhaps
that gives you better consistent performance. Something like this-

SELECT contacts.id
FROM contacts
JOIN contacts__aggregated AS contacts__aggregated_1 ON
contacts__aggregated_1.company_id = contacts.company_id
AND contacts__aggregated_1.contact_id = contacts.id
AND contacts__aggregated_1.field_name = 'names'
WHERE contacts.company_id = '\x4c2118ad54397f271b000000'

AND EXISTS (
SELECT
FROM contacts_values
WHERE contacts_values.field_id =
'\x000000000000000000000000'
AND contacts_values.field_name = 'facebook'
AND
nimble_contact_value_normalize(nimble_skip_long_values(contacts_values.value))
= nimble_contact_value_normalize('http://www.facebook.com/jon.ferrara'))
AND contacts_values.company_id = contacts.company_id
AND contacts_values.id = contacts.id
UNION ALL
SELECT
FROM contacts_values
WHERE contacts_values.field_id =
'\x000000000000000000000000'
AND contacts_values.field_name = 'last_name'
AND
nimble_contact_value_normalize(nimble_skip_long_values(contacts_values.value))
= nimble_contact_value_normalize('Ferrara')
AND contacts_values.company_id = contacts.company_id
AND contacts_values.id = contacts.id
)

ORDER BY contacts__aggregated_1.value ASC
LIMIT 30 OFFSET 0;

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message stan 2019-11-22 18:32:35 Re: A question about user atributes
Previous Message Adrian Klaver 2019-11-22 18:10:35 Re: Remote Connection Help