Sử dụng Postgres 9.4, tôi muốn tạo chỉ mục trên cột json sẽ được sử dụng khi tìm kiếm trên các khóa cụ thể trong cột.Chỉ mục PostgreSQL trên JSON
Ví dụ tôi có một bảng 'nông trại' với một cột json 'động vật'.
Cột động vật có đối tượng json của định dạng chung:
'{"cow": 2, "chicken": 11, "horse": 3}'
Tôi đã thử một số chỉ số (riêng):
(1) create INDEX animal_index ON farm ((animal ->> 'cow'));
(2) create INDEX animal_index ON farm using gin ((animal ->> 'cow'));
(3) create INDEX animal_index ON farm using gist ((animal ->> 'cow'));
Tôi muốn chạy các truy vấn như:
SELECT * FROM farm WHERE (animal ->> 'cow') > 3;
và yêu cầu truy vấn đó sử dụng chỉ mục.
Khi tôi chạy truy vấn này:
SELECT * FROM farm WHERE (animal ->> 'cow') is null;
thì (1) chỉ số hoạt động, nhưng tôi không thể nhận được bất kỳ của các chỉ số để làm việc cho sự bất bình đẳng.
là một chỉ số như vậy có thể?
Bảng trang trại chỉ chứa ~ 5000 trang trại, nhưng một số trang trại chứa 100 con vật và truy vấn chỉ mất quá nhiều thời gian cho trường hợp sử dụng của tôi. Một chỉ mục như thế này là phương pháp duy nhất tôi có thể nghĩ đến để tăng tốc truy vấn này, nhưng có lẽ có một tùy chọn khác.
Cảm ơn bạn! Câu trả lời tuyệt vời. Tôi chỉ quan tâm đến cấp độ đầu tiên. Giá trị luôn là số nguyên. Tuy nhiên tôi quan tâm đến một số động vật khác. Liệu nó có ý nghĩa để đơn giản sao chép chỉ mục này cho từng con vật mà tôi quan tâm? – lnhubbell
@lnhubbell: Dành cho * số lượng động vật được biết, tĩnh, tầm thường * này nên là giải pháp đơn giản và hiệu quả nhất. Tôi rõ ràng sẽ làm cho chúng một phần chỉ mục, mặc dù. Xem phụ lục ở trên. –