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

Kan PostgreSQL indeksere array-kolonner?

Ja, du kan indeksere et array, men du skal bruge array-operatorerne og GIN-indekstypen.

Eksempel:

    CREATE TABLE "Test"("Column1" int[]);
    INSERT INTO "Test" VALUES ('{10, 15, 20}');
    INSERT INTO "Test" VALUES ('{10, 20, 30}');

    CREATE INDEX idx_test on "Test" USING GIN ("Column1");

    -- To enforce index usage because we have only 2 records for this test... 
    SET enable_seqscan TO off;

    EXPLAIN ANALYZE
    SELECT * FROM "Test" WHERE "Column1" @> ARRAY[20];

Resultat:

Bitmap Heap Scan on "Test"  (cost=4.26..8.27 rows=1 width=32) (actual time=0.014..0.015 rows=2 loops=1)
  Recheck Cond: ("Column1" @> '{20}'::integer[])
  ->  Bitmap Index Scan on idx_test  (cost=0.00..4.26 rows=1 width=0) (actual time=0.009..0.009 rows=2 loops=1)
        Index Cond: ("Column1" @> '{20}'::integer[])
Total runtime: 0.062 ms
Bemærk

det ser ud til, at gin__int_ops i mange tilfælde mulighed er påkrævet

create index <index_name> on <table_name> using GIN (<column> gin__int_ops)

Jeg har endnu ikke set et tilfælde, hvor det ville fungere med &&- og @>-operatøren uden gin__int_ops-mulighederne



  1. Kerberos til SQLyog af MariaDB Connector/C

  2. Indstil en offentlig standardprofil for databasemail (SSMS)

  3. Hvordan make_date() virker i PostgreSQL

  4. Er der en måde i ORACLE at forbinde flere rækkelinjer til en enkelt ved at bruge to tabeller, hvor de endelige værdier er adskilt med kommaer?