ProgramlamaBackend geliştirici

SQL'de indekslenmiş görünüm (Indexed View) nedir, nasıl uygulanır, ne için kullanılır ve kullanımı sırasında hangi dikkate alınması gereken noktalar vardır?

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

Cevap.

İndekslenmiş görünüm (Indexed View, indeksle birlikte malzeme görünümü) — kümeleme benzersiz indeksi olan bir görünümdür (VIEW). Bu, sorgu sonuçlarını diskte fiziksel olarak depolamayı ve erişimi hızlandırmak için indeksi kullanmayı sağlar.

Avantajları:

  • Sık kullanılan veya topluca toplanmış verilerin hızlı bir şekilde alınması.
  • Gerçek zamanlı hesaplamalardaki yükü azaltır.

Sınırlamalar:

  • Tüm sorgu türlerini desteklemez (örneğin, TEXT, NTEXT, IMAGE veri türlerini kullanmak mümkün değildir, bazı fonksiyonlar kullanılamaz).
  • Temel tabloda yapılan değişiklikler esnasında endeksin sürdürülmesi için ek maliyetler oluşur.
  • Deklare sırasında belirli katı kuralların yerine getirilmesi gerekir.

Kod örneği

CREATE VIEW dbo.SalesSummary WITH SCHEMABINDING AS SELECT SalesPersonID, COUNT_BIG(*) AS SalesCount, SUM(TotalDue) AS TotalDue FROM dbo.Sales GROUP BY SalesPersonID; GO CREATE UNIQUE CLUSTERED INDEX idx_SalesSummary ON dbo.SalesSummary (SalesPersonID);

Kandırmacalı Soru.

S: Tüm görünümler üzerinde indeks (küme) oluşturmak mümkün müdür?

C: Hayır, yalnızca sınırlamalara tamamen uyan VIEW'ler üzerinde indeks oluşturulabilir (örneğin, dış bağlantılar olmamalıdır, agregat fonksiyonlar uyumlu olmalıdır vb.). Aksi takdirde, indeks yaratma sorgusu hata verecektir.

Konunun inceliklerini bilmemekten kaynaklanan gerçek hata örnekleri.


Hikaye

Gerçek bir projede, bankacılık sistemindeki toplu raporların sorgulamalarını hızlandırmak gerekiyordu. Tablo güncellemeleri üzerindeki yükü analiz etmeden indekslenmiş VIEW oluşturuldu. Toplu ekleme işlemleri sırasında, görünüm endeksinin güncellenmesi için yüksek maliyetler nedeniyle ana tablonun performansı düşmüştür.


Hikaye

Uzman, dış bir tabloya belirli bir JOIN ile VIEW'yi indekslemenin mümkün olduğunu düşündü ve GETDATE() fonksiyonu kullandı. İndeks oluşturma isteği "Non-deterministic functions içerdiği için görünüme indeks yaratılamaz" hatasıyla sonuçlandı. Proje mimarisini düzeltmek için bir gün harcandı.


Hikaye

Büyük bir e-ticaret projesinde temel "Products" tablosundaki veri güncellemeleri, ortaya çıkan kilitlenmelerin nedeni oldu. Sebep — büyük bir indekslenmiş VIEW üzerinde, milyonlarca satırı etkileyen bir toplam hesaplama sırasında işlem yönetiminin yanlış yapılmasıdır.