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

SQL-indeksering på varchar

Taster på VARCHAR kolonner kan være meget lange, hvilket resulterer i færre poster pr. side og mere dybde (flere niveauer i B-Tree ). Længere indekser øger også cache-miss-forholdet.

Hvor mange strenge i gennemsnit knytter sig til hvert heltal?

Hvis der er relativt få, kan du kun oprette et indeks på heltalskolonnen og PostgreSQL vil foretage den fine filtrering på poster:

CREATE INDEX ix_mytable_assoc ON mytable (assoc);

SELECT  floatval
FROM    mytable
WHERE   assoc = givenint
        AND phrase = givenstring

Du kan også overveje at oprette indekset på streng-hasherne:

CREATE INDEX ix_mytable_md5 ON mytable (DECODE(MD5(phrase), 'HEX'));

SELECT  floatval
FROM    mytable
WHERE   DECODE(MD5(phrase), 'HEX') = DECODE(MD5('givenstring'), 'HEX')
        AND phrase = givenstring -- who knows when do we get a collision?

Hver hash er kun 16 bytes lange, så indekstasterne vil være meget kortere, mens de stadig bevarer selektiviteten næsten perfekt.



  1. Hvordan man kører en Java-applikation ved hjælp af MySQL DB på en computer uden MySQL installeret?

  2. Prioriter en kolonne frem for en anden

  3. JSON_STORAGE_SIZE() – Find lagerstørrelsen for et JSON-dokument i MySQL

  4. psql:kommando ikke fundet Mac