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



Download 17,08 Mb.
Pdf ko'rish
bet127/210
Sana25.06.2022
Hajmi17,08 Mb.
#704548
TuriРуководство
1   ...   123   124   125   126   127   128   129   130   ...   210
Bog'liq
OptimizZaprvPostgreSQL

Листинг 9.3 

Использование одной таблицы
SELECT *
FROM account
WHERE update_ts BETWEEN now()- interval '1 day' AND now();
Получить тот же результат в варианте с двумя таблицами сложнее, см. 
лис тинг 9.4.
Эти два примера иллюстрируют еще один момент – запрос, для которого 
решение с двумя таблицами является предпочтительным, с бóльшей веро-
ятностью появится в системе OLTP, а запрос, который лучше обслуживается 
решением с одной таблицей, более характерен для системы OLAP. Для пре-
образования данных из OLTP-систем в формат, который лучше подходит для 
нужд бизнес-аналитики, можно использовать ETL-инструменты.
Похожая ситуация была показана в главе 6, где неоптимальная схема 
базы данных приводила к неоптимальному запросу (см. лис тинг 6.26). Даже 
оптимизированная версия запроса оставалась относительно медленной. 
Эти примеры показывают влияние проектирования схемы базы данных на 
производительность. Иногда негативные последствия неподходящей схемы 
нельзя исправить улучшением запроса или построением дополнительных 
индексов.
В следующих разделах этой главы рассматриваются проектные решения, 
которые чаще всего отрицательно влияют на производительность.


168

Проектирование имеет значение
Листинг 9.4 

Тот же запрос в варианте с двумя таблицами
SELECT a.account_id,
login,
first_name,
last_name,
frequent_flyer_id,
home_phone
work_phone,
cell_phone,
primary_phone
FROM account a
JOIN (
SELECT account_id,
max(phone) FILTER (WHERE phone_type = 'home') AS home_phone,
max(phone) FILTER (WHERE phone_type = 'work') AS work_phone,
max(phone) FILTER (WHERE phone_type = 'mobile') AS cell_phone,
max(phone) FILTER (WHERE primary_phone IS true) AS primary_phone
FROM phone
WHERE account_id IN (
SELECT account_id
FROM phone
WHERE update_ts BETWEEN now()- interval '1 day' AND now()
UNION
SELECT account_id
FROM account
WHERE update_ts BETWEEN now()- interval '1 day' AND now()
)
GROUP BY 1
) p USING (account_id)

Download 17,08 Mb.

Do'stlaringiz bilan baham:
1   ...   123   124   125   126   127   128   129   130   ...   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