Materialized View Nedir? View’dan Farkı Nedir?

View Nedir?

SQL’deki view’lar bir tür sanal tablodur. Bir view, veritabanındaki normal bir tabloda olduğu gibi satırlara ve sütunlara sahiptir. Veritabanında bulunan bir veya daha fazla tablodan alanlar seçerek bir view oluşturabilirsiniz. SQL veritabanlarındaki tablolara benzer şekilde davranan ancak aslında fiziksel bir varlık olmayan bu yapılar, veritabanı yönetim sistemi (DBMS) tarafından oluşturulan bir sorgu sonucu olarak görünürler.

SQL view’lar, aşağıdaki durumlar için kullanışlı olabilir:

  1. Veri Gizleme ve Güvenlik: Belirli kullanıcılara veya uygulamalara sadece belirli sütunları veya satırları göstermek için view’lar kullanılabilir. Bu şekilde, kullanıcılar sadece ihtiyaç duydukları verilere erişebilirler.
  2. Karmaşık Sorguların Basitleştirilmesi: Gelişmiş sorgular veya birleştirilmiş tablolar üzerinde yapılan karmaşık işlemleri basitleştirmek için view’lar kullanılabilir. Bu sayede kullanıcılar, karmaşık sorguları tekrar tekrar yazmak yerine, view’ı sorgulayarak işlem yapabilirler.
  3. Veri Yapısının Standartlaştırılması: Bir veri tabanında bulunan veri yapısını standartlaştırmak için view’lar kullanılabilir. Belirli bir görünüm, bir veritabanında tutulan farklı tablolar arasında birleştirilmiş veya işlenmiş verilere erişimi sağlar.
  4. Veri Değişikliklerini Yönetme: Viwe’lar, veri tabanındaki fiziksel değişikliklere karşı dirençli olabilir. Örneğin, bir görünümde kullanılan sütun adları değişse bile, görünüm tanımı güncellenmedikçe görünüm üzerindeki sorgular çalışmaya devam edebilir.

 

View Tanımlama

Bir view aşağıdaki şekilde tanımlanır:

CREATE VIEW view_name AS
SELECT column1, column2, ...
FROM table1
WHERE condition;

Bu ifadede WHERE koşulu view’ın hangi verilerden oluşacağını belirler.

View’lar Güncellenebilir mi?

Geleneksel SQL view’lar genellikle tek bir tabloya veya birleştirilmiş tablolara dayanır ve genellikle güncellenemezler. Yani, bir view üzerinde yapılan değişiklikler doğrudan tablolara yansıtılamaz.

Genel olarak, view’lar genellikle veriyi sadece okumak için kullanılır ve veriyi güncellemek veya değiştirmek için kullanılması önerilmez. Veriyi güncellemek istiyorsanız, genellikle doğrudan ilgili tablolara güncelleme işlemleri uygulanır.

Materialized View Nedir?

Materialized view, belli bir sorgunun sonuçlarını fiziksel bir tablo olarak depolayan ve bu verilere erişim sağlayan bir veritabanı nesnesidir. Materialized view’lar, canlı veriye erişim sağlamak yerine, belirli bir aralıkta güncellenir veya manuel olarak yenilenir. Yani, materialized view’ın içeriği bir güncelleme yapılana kadar sabit kalır.

Materialized View’ın normal view’a göre farkı, view sorgularında istenilen verileri canlı tablolara gidip getirirken, materialized view’lar bu verileri bir tabloda fiziksel olarak saklar. Bu tablo, gerçek bir veritabanındaki bir tablo gibidir.

Materialized view’lar, genellikle şu durumlar için kullanılır:

  1. Performans İyileştirmesi: Bir sorgunun maliyeti yüksekse ve sık sık kullanılıyorsa, Materialized view kullanarak sorgunun sonuçlarını önceden hesaplayabilir ve bu sonuçları bir tabloda tutarak performansı arttırabilirsiniz.
  2. Tekrarlayan Sorgulara Karşı Maliyet Düşürme: Materialized view’lar, sık sık tekrarlanan sorgularda maliyeti düşürebilir, çünkü bu sorgular her çalıştığında tablodan veri çekmek yerine depolanmış veriyi kullanabilirler.
  3. İnternet Bağlantısı Olmayan Senaryolar: Materialized view’lar, bir sorgunun sonuçlarını önceden hesaplayıp kaydederek bu sonuçları çevrimdışı kullanmaya olanak sağlar.

Materialized view’lar, şu şekilde oluşturulur:

CREATE MATERIALIZED VIEW matview_name AS
SELECT column1, column2, ...
FROM table1
WHERE condition;
UPDATE ON REFRESH

UPDATE ON REFRESH ifadesi bir Materialized view’lar için güncelleme stratejisini belirten bir ifadedir. Bu ifade, Materialized view’ın nasıl güncelleneceğini ve verilerin nasıl yeniden hesaplanacağını belirler.

Materialized view’lar, bir sorgunun sonuçlarını fiziksel tablolarda tutabilirler ancak, bu veriler zamanla güncellenmeye ihtiyaç duyabilir ve bu noktada REFRESH işlemi devreye girer.

Örnek bir REFRESH kullanımı aşağıdaki şekilde olabilir:

 

CREATE MATERIALIZED VIEW matview_name
AS
SELECT column1, column2, ...
FROM table1
WHERE condition
WITH [NO] DATA
REFRESH [FAST | COMPLETE] [ON [COMMIT | DEMAND] | SCHEDULE expression];
  • REFRESH FAST veya REFRESH COMPLETE: Materialized view’ın hızlı mı yoksa tam mı güncelleneceğini belirler.
  • ON COMMIT veya ON DEMAND: Materialized view’ın ne zaman güncelleneceğini belirler. ON COMMIT, her işlem sonucunda güncelleme yapar. ON DEMAND, manuel olarak güncelleme yapar.
  • SCHEDULE expression: Materialized view’ı belirli bir zaman aralığında güncellemek için bir zaman ifadesi sağlar.

Refresh sorgularında materialized view’ı locklanır ve refresh sırasında materialized view kullanılamaz. Lock senaryoları aşağıdaki gibidir:

  1. REFRESH FAST ON COMMIT (Hızlı Yenileme İşlemi, Transaction Sonunda):
    • Bu durumda, materialized view işlem sonunda güncellenir. Bu sırada tablonun kısa süreli kilitlenmesi söz konusu olabilir.
  2. REFRESH FAST ON DEMAND (Hızlı Yenileme İşlemi, Manuel):
    • Materialized view’ı manuel olarak tetiklediğinizde güncellenir ve bu sırada da tablo kısa süreliğine kilitlenebilir.
  3. REFRESH COMPLETE ON COMMIT veya ON DEMAND (Tam Yenileme):
    • Tam yenileme işlemi sırasında, materialized view’ın tüm verileri silinip yeniden oluşturulacağı için tablo genellikle daha uzun bir süreliğine kilitlenir.

Complete Refresh hakkında Oracle dökümantasyonu için tıklayabilirsiniz.

Materialized view’lar kendi kendini refresh edebilir. Bunun için veritabanında belirli periyotlarla çalışan dbms_job oluşturur.

Emre

Software Engineer

More Reading

Post navigation