PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Може ли PostgreSQL да индексира колони от масиви?

Да, можете да индексирате масив, но трябва да използвате операторите на масива и типа GIN-индекс.

Пример:

    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];

Резултат:

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
Забележка

изглежда, че в много случаи gin__int_ops е необходима опция

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

Все още не съм виждал случай, в който да работи с оператора &&и @> без опциите gin__int_ops



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Имената на колоните в PostgreSQL са чувствителни към главни букви?

  2. Кога имената на колони или таблици в Postgres се нуждаят от кавички и кога не?

  3. Възможно ли е да се промени естествения ред на колоните в Postgres?

  4. Извличане на месеца от дата в PostgreSQL

  5. Използване на една и съща колона няколко пъти в клаузата WHERE