sql >> Database >  >> RDS >> PostgreSQL

Querysnelheid verbeteren:eenvoudige SELECT in grote postgres-tabel

Mijn opmerkingen extraheren in een antwoord:de index-lookup hier was erg snel - alle tijd werd besteed aan het ophalen van de daadwerkelijke rijen. 23 seconden / 7871 rijen =2,9 milliseconden per rij, wat redelijk is voor het ophalen van gegevens die verspreid zijn over het schijfsubsysteem. Zoekt langzaam; u kunt a) uw dataset in RAM plaatsen, b) SSD's kopen, of c) uw gegevens van tevoren organiseren om zoekacties te minimaliseren.

PostgreSQL 9.2 heeft een functie genaamd alleen-index-scans waarmee het (meestal) vragen kan beantwoorden zonder de tabel te openen. Je kunt dit combineren met de btree index eigenschap van het automatisch handhaven van de volgorde om deze query snel te maken. U vermeldt int1 , int2 , en twee drijvers:

CREATE INDEX sometable_int1_floats_key ON sometable (int1, float1, float2);
CREATE INDEX sometable_int2_floats_key ON sometable (int2, float1, float2);

SELECT float1,float2 FROM sometable WHERE int1=<value>; -- uses int1 index
SELECT float1,float2 FROM sometable WHERE int2=<value>; -- uses int2 index

Merk ook op dat dit de schijfzoekopdrachten niet op magische wijze wist, maar ze alleen verplaatst van de querytijd naar de invoegtijd. Het kost je ook opslagruimte, omdat je de gegevens dupliceert. Toch is dit waarschijnlijk de afweging die je wilt.



  1. SSRS 2014 rapport implementatieprobleem

  2. Waarom krijg ik PLS-00302:component moet worden aangegeven als het bestaat?

  3. De beste manier om dubbele invoer in de mysql-database te voorkomen

  4. Is het beter om veel sql-opdrachten met één verbinding uit te voeren, of elke keer opnieuw verbinding te maken?