我想使用索引來加速我的 Postgres 資料庫中的搜索。這是我第一次使用索引,所以我不確定什么是最好的方法。
我要在其中使用索引的表如下所示:
| id [id] | data [jsonb] |
|--------------------- ------------------------|
| a11 | [ |
| | { |
| | "itemId": "p11", |
| | "position": 4 |
| | }, |
| | { |
| | "itemId": "p12", |
| | "position": 2 |
| | } |
| | ] |
| ------------------- | ---------------------- |
| a12 | [ |
| | { |
| | "itemId": "p13", |
| | "position": 3 |
| | }, |
| | { |
| | "itemId": "p14", |
| | "position": 6 |
| | } |
| | ] |
| ------------------- | ---------------------- |
| a13 | [ |
| | { |
| | "itemId": "p11", |
| | "position": 3 |
| | }, |
| | { |
| | "itemId": "p14", |
| | "position": 2 |
| | } |
| | ] |
該表有數千個條目,我想要做的是快速找到包含特定 itemId 的所有條目。例如:在這種情況下,查找“p11”將回傳 ID 為“a11”和“a13”的條目。
最好的方法是什么?
我的做法是使用 GIN-indexes 創建一個索引表,并僅索引資料列的 itemIds。位置和其他資料不需要索引。
這會是 GIN 索引的合適用例嗎?如果沒有,我應該改用什么?SQL 陳述句會是什么樣子?
謝謝您的幫助。
uj5u.com熱心網友回復:
直接的方法是在整個 JSON 上創建一個 GIN 索引:
CREATE INDEX ON tab USING gin (data);
并像這樣查詢:
SELECT id FROM tab WHERE data @> '[ { "itemId": "p11" } ]';
如果您想保持索引的大小盡可能小并使查詢盡可能快,則可以改用這樣的 B-tree 索引:
CREATE INDEX ON tab (id) WHERE data @> '[ { "itemId": "p11" } ]';
該部分索引將更好地支持上述查詢,但它可能只對那個查詢有用。您必須決定收益是否超過了普遍性的損失。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/415484.html
標籤:
