Bir DW tasarlayacağım ve somut görünümler duydum. Aslında bir görünüm oluşturmak istiyorum ve temel tablolar değiştirildiğinde otomatik olarak güncellenmesi gerekiyor. Herhangi biri bir sorgu örneği ile açıklayabilir mi?
Yanıtlar:
Bunlara SQL Server'da dizinlenmiş görünümler denir - daha fazla arka plan için bu teknik incelemeleri okuyun:
Temel olarak yapmanız gereken tek şey:
ve bitirdiniz!
İşin zor kısmı şudur: görüş, çok sayıda kısıtlamayı ve sınırlamayı karşılamalıdır - bunlar teknik incelemede özetlenmiştir. Eğer bunu yaparsan - hepsi bu. Görünüm otomatik olarak güncelleniyor, bakıma gerek yok.
Ek kaynaklar:
Tamamen mühendislik açısından bakıldığında, dizine alınmış görünümler, performansı iyileştirmek için herkesin kullanabileceği bir şey gibi görünse de gerçek hayat senaryosu çok farklıdır. Başarısız oldum, neyin indekslenebileceğine ve neyin yapılamayacağına dair çok fazla kısıtlama nedeniyle onlara en çok ihtiyaç duyduğum yerlerde indekslenmiş görünümleri kullanmak.
Görünümlerde dış birleşimleriniz varsa, bunlar kullanılamaz. Ayrıca, ortak tablo ifadelerine izin verilmez ... Aslında, alt seçimler veya türetilmiş tablolarda herhangi bir sıralama varsa (örneğin bölümlere göre bölümleme ile), şansınız da yok demektir.
Bu, indekslenmiş görünümleri kullanmak için yalnızca çok basit senaryolar bırakıyor, bence bir şey yine de alttaki tablolarda uygun indeksler oluşturarak optimize edilebilir.
İnsanların gerçekten indekslenmiş görünümleri kendi çıkarları için kullandıkları ve onlarsız yapamayacakları bazı gerçek hayat senaryolarını duymaktan heyecan duyacağım.
(NOEXPAND)
Dizine alınmış görünümleri kullanan sorgulara ipucu eklemeyi unutmamalısınız . Ve sonra farkı fark edersiniz. Dizine alınmış görünümleri kullanmanın "tabloları düzgün bir şekilde dizine eklemenin" avantajı, kayıt seçimini sınırlamaktır, aksi takdirde haklısınız, aynı olur.
Bir Materyalleştirilmiş Görünümün gerçekte ne olduğu konusunda biraz daha fazla arka plana ihtiyacınız olabilir. Oracle'da bunlar, başka bir yerde inşa etmeye çalıştığınızda bir dizi unsurdan oluşan bir nesnedir.
MVIEW, aslında başka bir kaynaktan gelen verilerin anlık görüntüsüdür. Görünümden farklı olarak, bir tablo biçiminde yerel olarak depolanan görünümü sorguladığınızda veriler bulunmaz. MVIEW, düzenli aralıklarla veya kaynak veriler değiştiğinde başlayan bir arka plan prosedürü kullanılarak yenilenir. Oracle, tam veya kısmi yenilemelere izin verir.
SQL Server'da, düzenli olarak yenilemek (tamamlamak) için temel bir MVIEW oluşturmak için aşağıdakileri kullanırdım.
Önce bir manzara. Görünümler herhangi bir veritabanında oldukça yaygın olduğundan, bu çoğu kişi için kolay olmalıdır. Sonra, bir tablo. Bu, sütunlardaki ve verilerdeki görünümle aynı olmalıdır. Bu, görünüm verilerinin anlık görüntüsünü saklayacaktır. Ardından, tabloyu kesen ve görünümdeki mevcut verilere göre yeniden yükleyen bir prosedür. Son olarak, işe başlamak için prosedürü tetikleyen bir iş.
Diğer her şey deneydir.
Dizine alınmış görünüm bir seçenek olmadığında ve hızlı güncellemeler gerekmediğinde, bir bilgisayar korsanlığı önbellek tablosu oluşturabilirsiniz:
select * into cachetablename from myviewname
alter table cachetablename add primary key (columns)
-- OR alter table cachetablename add rid bigint identity primary key
create index...
sonra sp_rename görünümü / tablosu veya ona başvuran sorguları veya diğer görünümleri önbellek tablosuna işaret edecek şekilde değiştirin.
günlük / gece / haftalık / yenilenmeyecek şekilde planla
begin transaction
truncate table cachetablename
insert into cachetablename select * from viewname
commit transaction
Not: bu, tx günlüklerinizde de yer kaplar. En iyi, hesaplanması yavaş olan küçük veri kümeleri için kullanılır. Belki de "kolay ama büyük" sütunları önce bir dış görünüme elemek için yeniden düzenleme yapın.
MS T-SQL Sunucusu için, "include" ifadesiyle bir dizin oluşturmayı öneriyorum. Benzersizlik gerekli değildir, ayrıca kümelenmiş bir indeksle ilişkili verilerin fiziksel olarak sıralanması da gerekmez. "Dizin ... Dahil Et ()", sistem tarafından otomatik olarak tutulan ayrı bir fiziksel veri deposu oluşturur. Kavramsal olarak Oracle Materialized View'a çok benzer.
https://msdn.microsoft.com/en-us/library/ms190806.aspx
https://technet.microsoft.com/en-us/library/ms189607(v=sql.105).aspx