SORU
13 Ocak 2009, Salı


Bir görünüm daha hızlı, basit bir sorgu daha.

Bir

select *  from myView

sorgu daha hızlı bir görünüm oluşturmak için aynı seviyesinde bağımsız olması için ():

select * from ([query to create same resultSet as myView])

?

Eğer görünümü önbelleğe çeşit kullanıyorsa benim için kesinlikle daha hızlı yapma, basit bir sorgu göre değil.

CEVAP
13 Ocak 2009, Salı


Evetgörünümler kümelenmiş bir dizin atanmış olabilir, ve bunu yaptıklarında, geçici sonuçlar deposu yapacaklarını sonucu sorgular. hızlandırabilir

Güncelleme: bana oy En az üç kişi bu konuda. Tüm saygımla, onlar yanlış olduğunu düşünüyorum; Microsoft kendi belgelerine Görüş performansı çok açık hale getirir.

Öncelikle basit manzaralı yerde genişletilmiş ve doğrudan performans artışı katkı yapmak değil - bu çok doğru.Ancakolabilir oluşturulmuş görünümlerdramatikperformansını artırmak.

Bana belgelerine doğrudan devam edelim

Benzersiz kümelenmiş dizin görünümü oluşturulduktan sonra görünümün sonuç kümesi hemen hayata ve veritabanının fiziksel depolama, yürütme zaman bu pahalı operasyonu yükü tasarrufu devam etti.

İkinci olarak, bu dizin oluşturulmuş görünümler çalışabilirdoğrudan başka bir sorgu tarafından başvurulan bir yöntem yokturdoktoru uygun zaman tablo bir referans yerine onları kullanmak gibi.

Yine, belgeler:

Dizinli görünüm iki şekilde bir sorgu yürütme için kullanılabilir. Sorgu referans dizinli görünüm doğrudan, ya da, daha önemlisi, sorgu iyileştiricisi seçin görünümü ise bunu belirleyen görüntüleyebilir yerine tek sorguda düşük maliyetli bir sorgu planı. İkinci durumda, dizin oluşturulmuş görünüm, temel tablolar ve dizinler sıradan onların yerine kullanılır. Görünüm sorgu iyileştiricisi sorgu için sorgu yürütme sırasında kullanmak için başvuru olması gerekmez. Bu mevcut uygulamaları bu uygulamaları değiştirmeden yeni oluşturulan dizin oluşturulmuş görünümler yarar sağlar.

Bu belgelerin yanı sıra grafik performans artışı gösteren, here bulunabilir.

Güncelleme 2:cevap "endeks" performans avantajı sağlar, "Görünüm." değil olduğu gerekçesiyle eleştirildi Ancak, bu kolayca yalanladı.

Bize küçük bir ülkede bir yazılım şirketi insanlarız diyelim; örnek olarak Litvanya kullanacağım. Yazılım dünya çapında satmak ve SQL Server veritabanındaki kayıtlarımızı tutmak. Çok başarılı olduk ve, birkaç yıl içinde, 1,000,000 kayıtları var. Ancak, biz genellikle vergi amaçlı satış raporu gerekiyor ve eve sadece bizim ülkemizde yazılım 100 kopya sattık. Sadece Litvanya kayıtları oluşturulmuş görünüm oluşturarak, MS belgelerinde açıklandığı şekilde oluşturulmuş önbelleğinde ihtiyacımız kayıtları devam ediyoruz. Litvanya için raporlarımız yaptık 2008, sorguda satış sadece 7 (Bazı kullanılmayan yaprakları ile Log2(100)) derinliğinde bir dizin arama. Eğer GÖRÜNÜMÜ olmadan aynı şeyi yapmak ve sadece güvenmek tabloya bir dizin olsaydık, 21 arama derinliği ile çapraz bir dizin ağacı gerekiyor!

Açıkçası, Görünüm kendisi bir performans avantajı (3x) Endeksi tek başına basit kullanımı ile bize sağlayacaktır. Gerçek dünyadan bir örnek kullanmak için denedim ama Litvanya satış basit bir liste bile bize büyük avantaj sağlayacağını unutmayın.

Sadece düz bir b-ağacı benim örneğin kullanıyorum unutmayın. SQL Server b-ağaç bazı varyant kullanan oldukça eminim ederken, ayrıntıları bilmiyorum. Yine de, bu noktasında duruyor.

Güncelleme 3:Soru Dizinli Görünüm sadece bir temel dizini masaya kullanıp kullanmadığını hakkında geldi. Yani, özetlemek gerekirse: "dizinli görünüm sadece standart bir dizin eşdeğerdir ve hiçbir şey ya da yeni bir görünüm için benzersiz bir fırsat sunuyor." Eğer bu doğruysa, tabii ki, o zaman yukarıdaki analiz yanlış olurdu! Bana bu eleştiri geçerli ya da doğru değil bence neden gösteren Microsoft belgelerine bir alıntı sunalım:

Dizin sorgu performansını artırmak için kullanma yeni bir kavram değil; ancak, dizin oluşturulmuş görünümler bu standart dizinler kullanılarak elde edilecek ek performans avantajları sağlar.

Birlikte endeksleri Görünümler oluşturulur hakkında belgelerinde fiziksel depolama ve diğer bilgileri veri sebat ile ilgili yukarıdaki Alıntı ile güvenli bir Dizinli Görünüm olduğunu söylemek doğru olur sanırımdeğilsadece önbelleğe alınan bir SQL bir dizin ana tablo üzerinde tanımlı kullanmak olur Seçin. Böylece, bu cevap durmaya devam ediyorum.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • dope2111

    dope2111

    29 HAZİRAN 2009
  • superflyy88

    superflyy88

    8 ŞUBAT 2009
  • UrAvgConsumer

    UrAvgConsume

    1 Ocak 2012