PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

PostgreSQL có thể lập chỉ mục các cột mảng không?

Có, bạn có thể lập chỉ mục một mảng, nhưng bạn phải sử dụng toán tử mảng và kiểu chỉ mục GIN.

Ví dụ:

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

Kết quả:

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
Ghi chú

có vẻ như trong nhiều trường hợp, gin__int_ops tùy chọn là bắt buộc

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

Tôi chưa gặp trường hợp nào mà nó hoạt động với toán tử &&và @> mà không có tùy chọn 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. Chỉ mục để tìm một phần tử trong một mảng JSON

  2. ST_DWithin nhận tham số là độ, không phải mét, tại sao?

  3. Nhập CSV PostgreSQL từ dòng lệnh

  4. Mệnh đề KIỂM TRA cho các chế độ xem có thể cập nhật

  5. Làm cách nào để cài đặt Postgis thành bản cài đặt Keg của [email bảo vệ] bằng Homebrew?