sql >> Database >  >> RDS >> PostgreSQL

Postgresql 9.x:Index om `xpath_exists` (XMLEXISTS)-query's te optimaliseren

Parameters planner kosten

Dit vertelt me ​​dat uw random_page_cost en seq_page_cost zijn waarschijnlijk fout. U bevindt zich waarschijnlijk op opslag met snelle willekeurige I/O - ofwel omdat het grootste deel van de database in het RAM-geheugen is opgeslagen of omdat u SSD, SAN met cache of andere opslag gebruikt waar willekeurige I/O inherent snel is.

Probeer:

SET random_page_cost = 1;
SET seq_page_cost = 1.1;

om de verschillen in kostenparameter aanzienlijk te verminderen en vervolgens opnieuw uit te voeren. Als dat werkt, overweeg dan om die parameters in postgresql.conf. . te wijzigen .

Uw schattingen van het aantal rijen zijn redelijk, dus het lijkt niet op een probleem met een verkeerde schatting van de planner of een probleem met slechte tabelstatistieken.

Onjuiste zoekopdracht

Ook uw vraag is onjuist. OFFSET 0 LIMIT 1 zonder een ORDER BY zal onvoorspelbare resultaten opleveren, tenzij u gegarandeerd precies één overeenkomst heeft, in welk geval de OFFSET ... LIMIT ... clausules zijn overbodig en kunnen volledig worden verwijderd.

Je kunt meestal veel beter vragen formuleren als SELECT max(...) of SELECT min(...) waar mogelijk; PostgreSQL is meestal in staat om een ​​index te gebruiken om de gewenste waarde eruit te pikken zonder een dure tabelscan of indexscan en sortering uit te voeren.

Tips

Trouwens, voor toekomstige vragen heeft de PostgreSQL-wiki goede informatie in de prestatiecategorie en een handleiding voor het stellen van Langzame query-vragen .




  1. Is de standaard mysql-verbinding via poort 3306 veilig in Sequel Pro?

  2. Dapper MySQL-retourwaarde

  3. MySQL controleren of een tabel bestaat zonder een uitzondering te genereren

  4. Substrings opvragen tegen een lijst met waarden