Руководство по созданию эффективных запросов



Download 17,08 Mb.
Pdf ko'rish
bet200/210
Sana25.06.2022
Hajmi17,08 Mb.
#704548
TuriРуководство
1   ...   196   197   198   199   200   201   202   203   ...   210
Bog'liq
OptimizZaprvPostgreSQL

Листинг 14.2 

Поиск с использованием индекса GIN по столбцу JSONB
SELECT *
FROM booking_jsonb
WHERE cplx_booking @@
'$.**.departure_airport_code == "ORD" && $.**.arrival_airport_code == "JFK"'
План выполнения на рис. 14.1 показывает, что индекс GIN используется.
Рис. 14.1 

План выполнения с индексом GIN
Но есть несколько сложностей, которые делают этот подход менее при-
влекательным, чем кажется на первый взгляд. Во-первых, поиск работает 
медленнее, чем поиск с использованием B-дерева. Например, функция, ко-


268

Более сложная фильтрация и поиск
торую мы создали в главе 13, выполняется в 2–2,5 раза быстрее, чем поиск 
с использованием индекса GIN.
SELECT *
FROM search_booking_leg(
$${"departure_airport":"ORD", "arrival_airport":"JFK"}$$::json
)
Во-вторых, индексы GIN не поддерживают поиск по атрибутам даты и вре-
мени, поиск с использованием оператора 
LIKE
или поиск по любым преоб-
разованным значениям атрибутов, например 
lower
. В предложении 
WHERE
вы 
можете указать несколько сложных условий поиска с выражениями 
json_path
и операторами и функциями JSONB, включая регулярные выражения, но про-
веряться они будут сканированием таблицы. Лучше будет объединить эти 
условия с теми, что поддерживаются индексами.
Вы можете поспособствовать поиску, создав дополнительные индексы 
триграмм. Фактически мы видели промышленную систему, которая была 
построена таким образом: на основе данных из нескольких таблиц и схем 
были созданы «поисковые документы» типа JSON, а затем были добавлены 
и проиндексированы столбцы 
tsvector
.
Однако с этим подходом связана и третья сложность. Как уже говорилось, 
одна структура JSON будет поддерживать только одну иерархию. Если бы 
мы создали столбец 
booking_jsonb
, как было описано ранее, то могли бы от-
носительно легко обновить рейс в сегменте бронирования, но не смогли бы 
обновить фактическое время вылета или статус рейса.
Это означает, что таблицу 
booking_jsonb
придется периодически перестра-
ивать, чтобы она оставалась полезной. Действительно, упомянутая выше 
промышленная система имела сложную последовательность триггеров, ко-
торые перестраивали все потенциально затронутые данные JSON. При от-
носительно низком ожидаемом количестве обновлений такое ограничение 
может быть некритичным, но к задержкам рейсов и изменению расписания 
это точно не относится.

Download 17,08 Mb.

Do'stlaringiz bilan baham:
1   ...   196   197   198   199   200   201   202   203   ...   210




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish