sql >> Database teknologi >  >> RDS >> PostgreSQL

Indeksscanning for sammenligning af flere kolonner - uensartet indekskolonnebestilling

PostgreSQL implementerer tuples meget grundigt (i modsætning til halve implementeringer fundet i Oracle, DB2, SQL Server osv.). Du kan skrive din tilstand ved at bruge "tuples ulighed", som i:

select * 
from table1
where (a, -b, c) >= (10, -20, 30)
order by a, -b, c
limit 10

Bemærk venligst, at da den anden kolonne er i faldende rækkefølge, skal du "invertere" dens værdi under sammenligningen. Det er derfor, det er udtrykt som -b og også -20 . Dette kan være vanskeligt for ikke-numeriske kolonner såsom datoer, varchars, LOB'er osv.

Endelig er brugen af ​​et indeks stadig muligt med -b kolonneværdi, hvis du opretter et ad-hoc-indeks, såsom:

create index ix1 on table1 (a, (-b), c);

Du kan dog aldrig tvinge PostgreSQL til at bruge et indeks. SQL er et deklarativt sprog, ikke et imperativt sprog. Du kan lokke det at gøre det ved at holde tabelstatistik opdateret, og også ved at vælge et lille antal rækker. Hvis din LIMIT er for stor, kan PostgreSQL være tilbøjelig til at bruge en fuld tabelscanning i stedet.



  1. Sådan fjerner du betingelser fra WHERE-klausulen, hvis parametrene er NULL

  2. Spring-app mister forbindelsen til MySql efter 8 timer. Hvordan konfigureres korrekt?

  3. Oracle JDBC og Oracle CHAR datatype

  4. Sådan konverteres UTC-dato til lokal tidszone i MySql Vælg forespørgsel