ProgramlamaSQL geliştirici / veri tabanı mimarı

SQL'de görünüm (VIEW) türleri nelerdir? Materyalize edilmiş görünümler nasıl çalışır ve normal VIEW'lerden ne farkı vardır? Kullanımları ne zaman mantıklıdır?

Hintsage yapay zeka asistanı ile mülakatları geçin

Cevap

SQL'de iki tür görünüm vardır:

  • Normal görünümler (View): mantıksal sanal tablolardır. Veri tutmazlar, VIEW'a her yapılan istek, kaynak tablolara alt sorgu oluşturur.
  • Materyalize edilmiş görünümler (Materialized View): sorgunun sonucunu ayrı bir tabloda fiziksel olarak saklar ve belirli aralıklarla günceller.

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.

Normal VIEW örneği:

CREATE VIEW active_users AS SELECT id, name FROM users WHERE status = 'active';

Materyalize edilmiş VIEW örneği (PostgreSQL):

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;

Kaygan Zemin Sorusu

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:

  • Normal VIEW'ler nadiren güncellemeye izin verir: sadece toplama, grup veya bileşik/hesaplanan alanlar yoksa (ve JOIN ile alt sorgular yoksa).
  • Materyalize edilmiş VIEW'ler doğrudan güncellenemez — yalnızca REFRESH ile, aksi takdirde veri tutarsızlığı meydana gelir.

Konunun inceliklerini bilmemekten kaynaklanan gerçek hata örnekleri


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.