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


 Функции Листинг 11.19



Download 17,08 Mb.
Pdf ko'rish
bet159/210
Sana25.06.2022
Hajmi17,08 Mb.
#704548
TuriРуководство
1   ...   155   156   157   158   159   160   161   162   ...   210
Bog'liq
OptimizZaprvPostgreSQL

208

Функции
Листинг 11.19 

Функция, возвращающая один посадочный талон
CREATE OR REPLACE FUNCTION boarding_passes_pass (p_pass_id int)
RETURNS SETOF boarding_pass_record
AS $body$
BEGIN
RETURN QUERY
SELECT pass_id,
bp.booking_leg_id,
flight_no,
departure_airport::text,
arrival_airport::text,
last_name,
first_name,
seat,
boarding_time
FROM flight f
JOIN booking_leg bl USING (flight_id)
JOIN boarding_pass bp USING (booking_leg_id)
JOIN passenger USING (passenger_id)
WHERE pass_id = p_pass_id;
END;
$body$
LANGUAGE plpgsql;
Почему использование этих функций могло бы улучшить производитель-
ность? Как мы обсуждали в главе 10, приложения редко выполняют инструк-
ции SQL напрямую; вместо этого они часто используют инструкции SQL, 
генерируемые инструментами объектно-реляционного отображения. Скорее 
всего, в этом случае обращение к таблицам 
boarding
passes

passengers
и 
flights
будет выполняться иначе. Для выбора тех же данных, которые возвращает 
функция 
boarding_passes_flight
, нам, вероятно, понадобится один метод для 
выбора аэропортов отправления и назначения и запланированного време-
ни вылета по номеру рейса, еще один метод потребуется для выбора всех 
сегментов бронирования для этого рейса, еще один метод – для посадочных 
талонов и еще один – для информации о пассажирах. Если удастся убедить 
разработчиков приложений, то, объединив все это в единую функцию, вы 
значительно повысите производительность.
Выбор всех посадочных талонов для рейса с 600 пассажирами с помощью 
функции занимает 220 мс: 
SELECT
*
FROM
boarding_passes_flight(13650)
. С дру-
гой стороны, любая отдельная инструкция 
SELECT
из любой таблицы занимает 
около 150 мс. Поскольку каждое обращение к таблице возвращает данные 
в приложение, совершая путь к серверу баз данных и обратно, время вы-
полнения суммируется, и несколько вызовов очень быстро превысят время 
выполнения функции.
Ранее мы уже выяснили, что для скалярных функций нет разницы между 
синтаксисом 
SELECT
*
FROM
имя_функции
и 
SELECT
имя
функции
. Но когда функция 
возвращает составной тип, разница появляется.
На рис. 11.1 показаны результаты выполнения команды
SELECT * FROM boarding_passes_flight(13)


Использование составных типов с вложенной структурой 


Download 17,08 Mb.

Do'stlaringiz bilan baham:
1   ...   155   156   157   158   159   160   161   162   ...   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