0
[{"id": "345", "categoryid": "2", "products": ["23", "45","34"]}]
[{"id": "2343", "categoryid": "3", "products":  ["123", "455"]}]
[{"id": "12", "categoryid": "12", "products":  ["234", "459","314","4563"]}, {"id": "512", "categoryid": "15", "products":  ["234"]}]
[{"id": "123", "categoryid": "3", "products":  ["293", "145","634"]}, {"id": "889", "categoryid": "18", "products":  ["123", "845","1234"]}]
[{"id": "2546", "categoryid": "2", "products":  ["2397", "452","434","234", "479","304","4563"]}]


SELECT *
FROM   products p,
       jsonb_array_elements(p.products_rec_jsonb) elem
WHERE  (elem ->> 'id')::bigint < 1234
       AND
       (
         (
           (elem -> 'products') ?| array(12,576,34)::text[]
           AND
           (elem -> 'categoryid') ?| array(12,5)::text[]
         )
         OR
         (elem -> 'categoryid') ?| array(12,5)::text[]
       )
ORDER BY (elem ->> 'id')::bigint DESC
LIMIT 20;

CREATE INDEX CONCURRENTLY idx_products_products ON products  USING GIN (products_rec_jsonb -> 'products')  

CREATE INDEX CONCURRENTLY idx_products_category ON products  USING GIN (products_rec_jsonb -> 'categoryid')  

CREATE INDEX CONCURRENTLY idx_products_id ON products  USING BTREE (products_rec_jsonb ->> 'id')  

我需要让这个查询使用索引(在 jsonb 列上products_rec_jsonb),比如"products","categoryid""id".

我想索引"products""category_id"作为 GIN 和"id"BTREE DESC(作为 bigint 数据类型)......问题是当我运行查询时它根本不使用索引。我该如何解决它?

4

0 回答 0