[{"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 数据类型)......问题是当我运行查询时它根本不使用索引。我该如何解决它?