sql >> Databáze >  >> RDS >> PostgreSQL

Extrémně pomalý PostgreSQL dotaz s klauzulemi ORDER a LIMIT

Když máte jak LIMIT, tak ORDER BY, optimalizátor rozhodl, že je rychlejší procházet nefiltrované záznamy pomocí kláves sestupně, dokud nezíská pět shod pro zbývající kritéria. V ostatních případech jednoduše spustí dotaz jako vnořenou smyčku a vrátí všechny záznamy.

Řekl bych, že problém je v tom, že PG nepoškodí kloub distribuce různých ID, a proto je plán tak neoptimální.

Možná řešení:Předpokládám, že jste nedávno spustili ANALYZE. Pokud ne, udělejte to. To může vysvětlovat, proč jsou vaše odhadované časy vysoké i na verzi, která se rychle vrací. Pokud problém přetrvává, možná spusťte ORDER BY jako podvýběr a klaďte LIMIT ve vnějším dotazu.



  1. Zkrátit všechny tabulky v databázi MySQL, které odpovídají vzoru názvu

  2. Jak uvolnit možné zámky řádků Postgres?

  3. Získejte příkaz Insert pro existující řádek v MySQL

  4. Kód chyby MySQL:1005