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.