Materiallashtirilgan ko'rinishlar
Kirish: Ushbu qo'llanmada siz PostgreSQL materiallashtirilgan ko'rinishlari (MATERIALIZED VIEW) yordamida murakkab so'rovlar natijalarini jismonan diskda saqlash va tizim unumdorligini keskin oshirishni o'rganasiz.
Oddiy ko'rinishlar (VIEW) ma'lumotlarni jismonan saqlamaydi — har safar ularga so'rov yuborilganda, orqa fondagi asosiy jadvallar qaytadan hisoblab chiqiladi. Agar so'rov juda murakkab bo'lsa va unga tez-tez murojaat qilinsa, bu ma'lumotlar bazasini sekinlashtiradi.
Ushbu muammoni hal qilish uchun PostgreSQL materiallashtirilgan ko'rinishlar (Materialized Views) ni taqdim etadi. Ular so'rov natijasini xuddi oddiy jadval kabi jismonan diskda saqlab qo'yadi (keshlaydi). Natijada keyingi so'rovlar hisob-kitobsiz, tayyor ma'lumotlar ustida juda tez bajariladi.
Materiallashtirilgan ko'rinish yaratish sintaksisi:
CREATE MATERIALIZED VIEW [IF NOT EXISTS] view_name
AS
query
WITH DATA;
Ushbu sintaksisda:
CREATE MATERIALIZED VIEW — yangi materiallashtirilgan ko'rinish e'lon qilish.AS query — hisoblanishi kerak bo'lgan asosiy so'rov.WITH DATA — ko'rinish yaratilishi bilanoq ma'lumotlar darhol jismonan yuklanishini ta'minlaydi.Misol: tovarlar va ularning umumiy qoldiqlarini jamlovchi inventory_view ni yaratamiz:
CREATE MATERIALIZED VIEW inventory_view
AS
SELECT
p.product_name,
SUM(i.quantity) AS quantity
FROM
inventories i
JOIN products p ON i.product_id = p.product_id
GROUP BY
p.product_name
WITH DATA;
Endi unga oddiy jadval kabi murojaat qilishimiz mumkin:
SELECT * FROM inventory_view
ORDER BY quantity DESC;
Natija:
product_name | quantity
----------------------------+----------
Dell Inspiron 27 | 330
Apple iMac 24" | 320
Lenovo ThinkPad X1 Carbon | 310
Materiallashtirilgan ko'rinishdagi ma'lumotlar asosiy jadvallar o'zgarganda avtomatik yangilanmaydi.
Ko'rinishdagi ma'lumotlarni asosiy jadvallardagi eng yangi holatga keltirish uchun REFRESH MATERIALIZED VIEW buyrug'i ishlatiladi:
REFRESH MATERIALIZED VIEW view_name;
Misol:
Dastlab inventory_view dagi umumiy tovarlar miqdorini ko'ramiz:
SELECT SUM(quantity) FROM inventory_view;
-- 5360
Endi asosiy inventories jadvalida tovar sonini yangilaymiz:
UPDATE inventories
SET quantity = 200
WHERE product_id = 1;
Bu paytda inventory_view hali eski keshni ushlab turadi. Uni yangilash uchun:
REFRESH MATERIALIZED VIEW inventory_view;
Endi qayta tekshirganimizda, yangi summa aks etadi:
SELECT SUM(quantity) FROM inventory_view;
-- 5460
Materiallashtirilgan ko'rinishni o'chirish uchun DROP MATERIALIZED VIEW ishlatiladi:
DROP MATERIALIZED VIEW IF EXISTS view_name CASCADE;
Masalan:
DROP MATERIALIZED VIEW inventory_view CASCADE;
MATERIALIZED VIEW murakkab so'rovlar natijasini diskda jismoniy saqlaydi va unumdorlikni keskin oshiradi.REFRESH MATERIALIZED VIEW dan foydalaning.DROP MATERIALIZED VIEW buyrug'i qo'llaniladi.