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

Chỉ mục PostgreSQL trên JSON

Hai chỉ mục khác của bạn sẽ không hoạt động chỉ vì ->> toán tử trả về text , trong khi rõ ràng bạn có jsonb các lớp toán tử gin trong tâm trí. Lưu ý rằng bạn chỉ đề cập đến json , nhưng bạn thực sự cần jsonb để có khả năng lập chỉ mục nâng cao.

Để tìm ra chiến lược lập chỉ mục tốt nhất, bạn phải xác định kỹ hơn những truy vấn nào cần bao gồm. Bạn chỉ quan tâm đến những con bò? Hoặc tất cả các động vật / tất cả các thẻ? Các toán tử nào có thể? Tài liệu JSON của bạn có bao gồm các khóa không phải là động vật không? Làm gì với những cái đó? Bạn có muốn đưa các hàng vào chỉ mục mà các con bò (hoặc bất cứ thứ gì) hoàn toàn không hiển thị trong tài liệu JSON không?

Giả sử:

  • Chúng tôi chỉ quan tâm đến những con bò ở cấp độ làm tổ đầu tiên.
  • Giá trị luôn là một số nguyên hợp lệ .
  • Chúng tôi không quan tâm đến các hàng không có bò.

Tôi đề xuất một chỉ mục btree chức năng, giống như bạn đã có, nhưng truyền giá trị thành số nguyên . Tôi không cho rằng bạn muốn so sánh được đánh giá là text (trong đó '2' lớn hơn '1111').

  TẠO INDEX animal_index TRÊN trang trại (((động vật ->> 'bò') ::int)); -!  

Cần có thêm tập hợp các dấu ngoặc đơn cho phép viết tắt truyền để làm cho cú pháp của biểu thức chỉ mục trở nên rõ ràng.

Sử dụng cùng một biểu thức trong các truy vấn của bạn để làm cho Postgres nhận ra rằng chỉ mục này có thể áp dụng được:

  CHỌN * TỪ trang trại WHERE (động vật ->> 'bò') ::int> 3;  

Nếu bạn cần một jsonb chung chung hơn chỉ mục, xem xét:

  • Chỉ mục thích hợp để truy vấn cấu trúc trong mảng trong Postgres jsonb là gì?

Đối với một đã biết, tĩnh, tầm thường số lượng động vật (như bạn đã nhận xét), tôi đề xuất các chỉ mục một phần như:

« ->> 'gà') ::int)) WHERE (động vật ->> 'gà') KHÔNG ĐẦY ĐỦ;

Vv.

Bạn có thể phải thêm điều kiện chỉ mục vào truy vấn:

  SELECT * FROM farmWHERE (súc vật ->> 'con bò') ::int> 3AND (con vật ->> 'con bò') KHÔNG ĐỦ;  

Có thể có vẻ thừa, nhưng có thể cần thiết. Kiểm tra với ANALYZE !




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách sao lưu và khôi phục cơ sở dữ liệu PostgreSQL qua DBeaver

  2. Cách chuyển đổi Dấu thời gian Unix thành Giá trị Ngày / Giờ trong PostgreSQL

  3. Cách date_part () hoạt động trong PostgreSQL

  4. Cách Atan2d () hoạt động trong PostgreSQL

  5. Làm thế nào để sao lưu cơ sở dữ liệu postgresql từ bên trong psql?