#postgresql
Вопрос:
Пожалуйста, дайте мне знать, как создать индекс для приведенного ниже запроса.
SELECT * FROM customers
WHERE identifiers @>
'[{"systemName": "SAP", "systemReference": "33557"}]'
AND country_code = 'IN';
identifiers
является типом jsonb, а данные, как показано ниже.
[{"systemName": "ERP", "systemReference": "TEST"}, {"systemName": "FEED", "systemReference": "2733"}, {"systemName": "SAP", "systemReference": "33557"}]
country_code
является типом varchar.
Ответ №1:
Либо создайте индекс ДЖИНА на identifiers
..
CREATE INDEX customers_identifiers_idx ON customers
USING GIN(identifiers);
.. или составной индекс с identifiers
и country_code
.
CREATE INDEX customers_country_code_identifiers_idx ON customers
USING GIN(identifiers,country_code gin_trgm_ops);
Второй вариант будет зависеть от распределения значений country_code
.
ДЕМОНСТРАЦИЯ: db<>fiddle
Ответ №2:
Вы можете создать gin
индекс для jsonb
введенных столбцов Postgresql
. gin
индекс имеет встроенные классы операторов для обработки операторов jsonb. Узнайте больше об индексе джина здесь https://www.postgresql.org/docs/12/gin-intro.html
Для типов varchar индекс btree достаточно хорош.