Использование postgresql 10.6. У меня есть таблица с именем place с полем jsonb towns , которое содержит массив json. Я создал индекс джин по городам. массив json будет иметь десятки тысяч записей. Мне нужно запросить этот массив для 5000 названия города в предложении, где. В запросе обязательно должен использоваться индекс джина для повышения производительности. Мой пример запроса в приведенной ниже скрипте не использует индекс, насколько я видел в плане выполнения. Как этот запрос должен быть написан для использования индекса, чтобы он выполнялся быстро.
Определение таблицы:
CREATE TABLE place (
cities jsonb NULL
);
CREATE INDEX "IX_place_cities" ON place USING gin (cities);
INSERT INTO place
(cities)
VALUES('[{"name": "paris", "continent": "europe"},
{"name": "london", "continent": "europe"},
{"name": "berlin", "continent": "europe"},
{"name": "istanbul", "continent": "europe"},
{"name": "prag", "continent": "europe"},
{"name": "rome", "continent": "europe"},
{"name": "wien", "continent": "europe"},
{"name": "tokyo", "continent": "asia"},
{"name": "beijing", "continent": "asia"},
{"name": "dakar", "continent": "africa"},
{"name": "daresselam", "continent": "africa"},
{"name": "kuala lumpur", "continent": "asia"},
{"name": "barcelona", "continent": "europe"}]');
Мой запрос:
select elems.arrayitem
FROM (
select jsonb_array_elements(place.cities) as arrayitem
from place
) as elems
where elems.arrayitem @> '{"name": "paris"}'
or elems.arrayitem @> '{"name": "dakar"}'
SQLFiddle