Afhankelijk van de voorwaarden kan het logischerwijs onmogelijk zijn om een index te gebruiken om een complexe voorwaarde te helpen met behulp van OR
uitdrukkingen.
Net als MySQL, PostgreSQL 8.0 en eerdere staten in hun docs over indexen :
Met PostgreSQL 8.1 is dit gewijzigd .
Als dit echter niet helpt, kunt u de UNION
. gebruiken oplossing die u hebt geprobeerd (dit is een veelgebruikte oplossing voor MySQL-gebruikers, die nog steeds een beperking van één index per tabel heeft).
U zou de resultaten van een UNION
. moeten kunnen bestellen query, maar u moet haakjes gebruiken om aan te geven dat ORDER BY
is van toepassing op het resultaat van de UNION
, niet alleen naar de laatste subquery in de keten.
(SELECT ... )
UNION
(SELECT ... )
UNION
(SELECT ... )
ORDER BY columnname;
Ik hoop dat dit helpt; Ik ben geen expert op het gebied van de PostgreSQL-optimizer. Je zou kunnen proberen te zoeken in de mailinglijstarchieven , of vraag het op het IRC-kanaal .