Nỗ lực ban đầu của bạn là đúng nhưng bạn cần sử dụng chỉ mục btree (một phần) và quét chỉ mục bitmap để dựa vào đó:
create index on product(((ext->'size')::int)) where ((ext->'size') is not null);
Tương tự đối với khối lượng, và nếu người lập kế hoạch không hiểu nó ngay tại chỗ, hãy thêm hai mệnh đề where, tức là where ext->'size' is not null
và tương tự đối với khối lượng.
Nếu có một mẫu nào đó (có thể là, vì hầu hết các sản phẩm có cùng kích thước cũng có khối lượng), có khả năng tạo chỉ mục đa cột kết hợp hai - một túi, mô tả kia.
Chỉ mục gin như bạn đã viết nó, cùng với truy vấn đi kèm (có lỗi cú pháp) về cơ bản sẽ làm điều tương tự nhưng không có thứ tự; nó sẽ chậm hơn.