Evet , görünümler kümelenmiş bir dizine atanmış olabilir ve bunu yaptıkları zaman sonuçta ortaya çıkan sorguları hızlandırabilecek geçici sonuçlar depolarlar.
Güncelleme: En az üç kişi bana bu konuda oy verdi. Tüm saygımla, onların sadece yanlış olduğunu düşünüyorum; Microsoft'un kendi belgeleri, Views'ın performansı artırabileceğini açıkça ortaya koymaktadır.
İlk olarak, basit görüşler yerinde genişletilir ve bu nedenle performans iyileştirmelerine doğrudan katkıda bulunmazlar - bu çok doğrudur. Ancak, dizine eklenen görünümler performansı önemli ölçüde artırabilir.
Doğrudan belgelere gideyim:
Görünümde benzersiz bir kümelenmiş dizin oluşturulduktan sonra, görünümün sonuç kümesi hemen gerçekleşir ve veritabanındaki fiziksel depolamada kalıcı olarak kalır ve bu pahalı işlemi yürütme zamanında gerçekleştirme yükünü azaltır.
İkincisi, bu dizine alınmış görünümler, başka bir sorgu tarafından doğrudan başvuruda bulunulmasalar bile , optimize edici uygun olduğunda tablo referansı yerine bunları kullanacak şekilde çalışabilir .
Yine, belgeler:
Dizin oluşturulmuş görünüm, sorgu yürütmesinde iki şekilde kullanılabilir. Sorgu, dizinlenmiş görünüme doğrudan başvurabilir veya daha da önemlisi, sorgu en iyileştiricisi, görünümün en düşük maliyetli sorgu planındaki sorgunun bir kısmı veya tamamı için değiştirilebileceğini belirlerse görünümü seçebilir. İkinci durumda, temel alınan tablolar ve sıradan dizinleri yerine dizinlenmiş görünüm kullanılır. Sorgu yürütücüsünün sorgu yürütme sırasında kullanması için görünümde sorguda başvurulmasına gerek yoktur. Bu, mevcut uygulamaların bu uygulamaları değiştirmeden yeni oluşturulan dizine alınan görünümlerden faydalanmasını sağlar.
Bu dokümantasyon ve performans iyileştirmelerini gösteren grafikler burada bulunabilir .
Güncelleme 2: Yanıt, "Görünüm" yerine performans avantajı sağlayan "dizin" olması nedeniyle eleştirildi. Ancak, bu kolayca çürütülür.
Küçük bir ülkede bir yazılım şirketi olduğumuzu varsayalım; Litvanya'yı örnek olarak kullanacağım. Dünya çapında yazılım satıyoruz ve kayıtlarımızı bir SQL Server veritabanında tutuyoruz. Çok başarılıyız ve bu nedenle birkaç yıl içinde 1.000.000'dan fazla kaydımız var. Ancak, genellikle vergi amaçlı satışları bildirmemiz gerekir ve kendi ülkemizde yazılımımızın yalnızca 100 kopyasını sattığımızı tespit ederiz. Yalnızca Litvanya kayıtlarının dizinlenmiş bir görünümünü oluşturarak, ihtiyaç duyduğumuz kayıtları MS belgelerinde açıklandığı gibi dizinlenmiş bir önbellekte tutuyoruz. 2008'de Litvanya satışları için raporlarımızı çalıştırdığımızda, sorgumuz sadece 7 derinliğe (kullanılmayan bazı yaprakları olan Log2 (100)) bir endeks içinde arama yapacak. Aynı şeyi VIEW olmadan ve sadece bir endekse tabloya dayanarak yapsaydık, arama derinliği 21 olan bir dizin ağacını geçmeliyiz!
Açıkçası, Görünüm'ün kendisi bize sadece endeksin basit kullanımı üzerinde bir performans avantajı (3x) sağlayacaktır. Gerçek dünyadan bir örnek kullanmaya çalıştım, ancak Litvanyalı satışların basit bir listesinin bize daha da büyük bir avantaj sağlayacağını göreceksiniz.
Örneğim için sadece düz bir b-ağacı kullandığımı unutmayın. SQL Server'ın bir b-ağacının bazı varyantlarını kullandığından oldukça emin olmakla birlikte, ayrıntıları bilmiyorum. Bununla birlikte, mesele tutulur.
Güncelleme 3: Bir Dizinlenmiş Görünümün yalnızca temel tabloya yerleştirilmiş bir dizin kullanıp kullanmadığı sorusu ortaya çıktı. Başka bir deyişle, "dizine alınmış bir görünüm yalnızca standart bir dizinin eşdeğeridir ve bir görünüme yeni veya benzersiz bir şey sunmaz." Bu doğruysa, elbette, yukarıdaki analiz yanlış olur! Bu eleştirinin neden geçerli veya doğru olmadığını düşündüğümü gösteren Microsoft belgelerinden bir teklif vereyim:
Sorgu performansını artırmak için dizinleri kullanmak yeni bir kavram değildir; ancak, dizinlenmiş görünümler standart dizinler kullanılarak elde edilemeyen ek performans avantajları sağlar.
Birlikte fiziksel depolama ve endeksleri Views'daki nasıl oluşturulduğunu hakkında dokümandaki diğer bilgilerde verilerin sebat ilgili yukarıdaki alıntı ile, bunun bir Endeksli Görüntüle olduğunu söylemek güvenli olduğunu düşünüyorum değil sadece kullanmak olur bir önbelleğe SQL Select ana tabloda tanımlanmış dizin. Bu yüzden, bu cevabın yanında olmaya devam ediyorum.