sql >> Databáze >  >> RDS >> PostgreSQL

SQL indexování na varchar

Klávesy na VARCHAR sloupce mohou být velmi dlouhé, což má za následek méně záznamů na stránku a větší hloubku (více úrovní v B-Tree ). Delší indexy také zvyšují poměr vynechání mezipaměti.

Kolik řetězců v průměru mapuje každé celé číslo?

Pokud je jich relativně málo, můžete vytvořit index pouze na celočíselném sloupci a PostgreSQL provede jemné filtrování záznamů:

CREATE INDEX ix_mytable_assoc ON mytable (assoc);

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

Můžete také zvážit vytvoření indexu pro hash řetězce:

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?

Každý hash je pouze 16 bajtů, takže indexové klíče budou mnohem kratší, přičemž si stále téměř dokonale zachovají selektivitu.



  1. Růst velikosti databáze SQL Server pomocí historie zálohování

  2. Příkaz MySQL SELECT s jedním polem DISTINCT

  3. SQL Agent Job - Připojení nemusí být správně nakonfigurováno nebo nemáte správná oprávnění k tomuto připojení?

  4. Výčet oddílů tabulky v tabulce Postgres