SQL'de iki tür görünüm vardır:
Normal View karmaşıklığı soyutlamak, erişimi kolaylaştırmak ve birden fazla kaynaktan veri birleştirmek için kullanışlıdır. Her zaman anlık oluşturulduğundan sorguları hızlandırmazlar.
Materyalize edilmiş View karmaşık raporlar ve analizlerde performans kazancı sağlar; burada her seferinde agregasyon ve join'leri beklemek önemli değildir. Verilerin güncel kalması için manuel veya zamanlama ile güncellemeleri gerekiyor.
CREATE VIEW active_users AS SELECT id, name FROM users WHERE status = 'active';
CREATE MATERIALIZED VIEW active_users_agg AS SELECT country, COUNT(*) as cnt FROM users WHERE status = 'active' GROUP BY country; -- Güncellemek için: REFRESH MATERIALIZED VIEW active_users_agg;
VIEW'de verileri güncellemek mümkün mü ve bu VIEW türüne bağlı olarak değişir mi?
Sıkça VIEW'lerin güncellenebilirlik açısından tablolarla tamamen aynı olduğu yanlış anlaşılır. ASLINA BAKILIRSA:
REFRESH ile, aksi takdirde veri tutarsızlığı meydana gelir.Hikaye 1
BI raporu, birden fazla JOIN ve agregat olan normal VIEW üzerinden oluşturuldu. Yük artışından sonra rapor oluşturma süresi on dakikaları buldu. Sistem analisti materyalize edilmiş bir görünüm önerdi ve bu, verilerin ayrı bir tabloda saklanması sayesinde anında birkaç saniyeye düşürdü.
Hikaye 2
Bir geliştirici Oracle'a geçişte normal VIEW üzerinden UPDATE yapmaya çalıştı, bu da "group by ile view güncellenemez" hatasını meydana getirdi. Sorun, görünümde GROUP BY'nın kullanılmasıydı.
Hikaye 3
Bir şirkette yeni veriler yüklendikten sonra materyalize edilmiş görünümü güncellemeyi unuttular; bu da, analizin bu VIEW üzerindeki eski verilerle çalışması nedeniyle farklı kullanıcılar arasında rapor tutarsızlıklarına yol açtı. Ardından otomatik REFRESH eklediler.