60 / 100

MATERIALIZED VIEW

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.

Materiallashtirilgan ko'rinishga kirish

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

Materiallashtirilgan ko'rinish yaratish sintaksisi:

query.sql
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:

query.sql
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:

query.sql
SELECT * FROM inventory_view
ORDER BY quantity DESC;

Natija:

matn
        product_name        | quantity
----------------------------+----------
 Dell Inspiron 27           |      330
 Apple iMac 24"             |      320
 Lenovo ThinkPad X1 Carbon  |      310

Ma'lumotlarni yangilash: REFRESH MATERIALIZED VIEW

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:

query.sql
REFRESH MATERIALIZED VIEW view_name;

Misol:

Dastlab inventory_view dagi umumiy tovarlar miqdorini ko'ramiz:

query.sql
SELECT SUM(quantity) FROM inventory_view;
-- 5360

Endi asosiy inventories jadvalida tovar sonini yangilaymiz:

query.sql
UPDATE inventories
SET quantity = 200
WHERE product_id = 1;

Bu paytda inventory_view hali eski keshni ushlab turadi. Uni yangilash uchun:

query.sql
REFRESH MATERIALIZED VIEW inventory_view;

Endi qayta tekshirganimizda, yangi summa aks etadi:

query.sql
SELECT SUM(quantity) FROM inventory_view;
-- 5460

Materiallashtirilgan ko'rinishni o'chirish: DROP MATERIALIZED VIEW

Materiallashtirilgan ko'rinishni o'chirish uchun DROP MATERIALIZED VIEW ishlatiladi:

query.sql
DROP MATERIALIZED VIEW IF EXISTS view_name CASCADE;

Masalan:

query.sql
DROP MATERIALIZED VIEW inventory_view CASCADE;

Nima uchun materiallashtirilgan ko'rinish kerak?

  • Hisobotlarni tezlashtirish: Millionlab qatorlarni jamlovchi analitik hisobotlarni oldindan hisoblab qo'yish orqali foydalanuvchilarga ma'lumotlarni bir zumda chiqarib beradi.
  • Baza yuklamasini kamaytirish: Asosiy jadvallar qayta-qayta og'ir agregatsiyalarga tortilmaydi.

Xulosa

  • MATERIALIZED VIEW murakkab so'rovlar natijasini diskda jismoniy saqlaydi va unumdorlikni keskin oshiradi.
  • Asosiy jadvallardagi o'zgarishlarni keshga o'tkazish uchun REFRESH MATERIALIZED VIEW dan foydalaning.
  • Uni o'chirish uchun DROP MATERIALIZED VIEW buyrug'i qo'llaniladi.