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



Download 17,08 Mb.
Pdf ko'rish
bet20/210
Sana25.06.2022
Hajmi17,08 Mb.
#704548
TuriРуководство
1   ...   16   17   18   19   20   21   22   23   ...   210
Bog'liq
OptimizZaprvPostgreSQL

Листинг 1.3 

Императивно построенный запрос
WITH bk AS (
WITH level4 AS (
SELECT * FROM account WHERE frequent_flyer_id IN (
SELECT frequent_flyer_id FROM frequent_flyer WHERE level = 4
)
)
SELECT * FROM booking WHERE account_id IN (
SELECT account_id FROM level4
)
)
SELECT * FROM bk WHERE bk.booking_id IN (
SELECT booking_id FROM booking_leg
WHERE leg_num=1
AND is_returning IS false
AND flight_id IN (
SELECT flight_id FROM flight
WHERE departure_airport IN ('ORD', 'MDW')
AND scheduled_departure::date = '2020-07-04'
)
)


24

Зачем нужна оптимизация?
В конце можно подсчитать фактическое количество пассажиров. Это мож-
но сделать с помощью запроса из лис тинга 1.4.
Листинг 1.4 

Подсчет общего количества пассажиров
WITH bk_chi AS (
WITH bk AS (
WITH level4 AS (
SELECT * FROM account WHERE frequent_flyer_id IN (
SELECT frequent_flyer_id FROM frequent_flyer WHERE level = 4
)
)
SELECT * FROM booking WHERE account_id IN (
SELECT account_id FROM level4
)
)
SELECT * FROM bk WHERE bk.booking_id IN (
SELECT booking_id FROM booking_leg
WHERE leg_num=1
AND is_returning IS false
AND flight_id IN (
SELECT flight_id FROM flight
WHERE departure_airport IN ('ORD', 'MDW')
AND scheduled_departure::date = '2020-07-04'
)
)
)
SELECT count(*) FROM passenger
WHERE booking_id IN (
SELECT booking_id FROM bk_chi
)
При построенном таким образом запросе вы не даете планировщику за-
просов выбрать лучший путь выполнения, потому что последовательность 
действий жестко зашита в код. Хотя все строки написаны на декларативном 
языке, они императивны по своей природе.
Вместо этого, чтобы написать декларативный запрос, просто укажите, что 
вам нужно получить из базы данных, как показано в лис тинге 1.5.
Листинг 1.5 

Декларативный запрос для расчета количества пассажиров
SELECT count(*)
FROM booking bk
JOIN booking_leg bl ON bk.booking_id = bl.booking_id
JOIN flight f ON f.flight_id = bl.flight_id
JOIN account a ON a.account_id = bk.account_id
JOIN frequent_flyer ff ON ff.frequent_flyer_id = a.frequent_flyer_id
JOIN passenger ps ON ps.booking_id = bk.booking_id
WHERE level = 4
AND leg_num = 1
AND is_returning IS false
AND departure_airport IN ('ORD', 'MDW')
AND scheduled_departure BETWEEN '2020-07-04' AND '2020-07-05'


Цели оптимизации 

25
Таким образом, вы позволяете базе данных решить, какой порядок опе-
раций выбрать. Лучший порядок может отличаться в зависимости от рас-
пределения значений в соответствующих столбцах.
Эти запросы лучше выполнять после того, как будут построены все необходимые индек-
сы в главе 5.

Download 17,08 Mb.

Do'stlaringiz bilan baham:
1   ...   16   17   18   19   20   21   22   23   ...   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