SORU
8 AĞUSTOS 2012, ÇARŞAMBA


Sql server tablo değişkeni vs geçici bir tablo kullanmalıyım?

Tablo değişkeni daha fazla ayrıntı öğreniyorum.Diyor ki geçici tablolar her zaman disk ve tablo değişkenleri bellekte olduğunu söylemek, performans tablosu değişken iyidir temp tablo tablo değişkenini kullanır daha az IO işlemleri daha geçici tablo.

Ama bazen, eğer bellekte bulunan edilemez bir tablo değişkeni çok fazla kayıt varsa,tablo değişkeni temp tablo gibi disk koymak olacaktır.

Ama "çok fazla kayıt". ne olduğunu bilmiyorum 100,000 kayıtları? ya da 1000,000 kayıtları? kullanıyorum nasıl bir tablo değişkeni bellekte veya diskte olup olmadığını öğrenebilir miyim? Sql server 2005'te herhangi bir işlev ya da aracı tablo değişken veya izin ölçeğini ölçmek için bana tablo değişkeni bellekten diske yerleştirme ne zaman bilen var mı ?

CEVAP
8 Aralık 2012, CUMARTESİ


Sorunuza yaygın yanlış tablo değişkenleri ve geçici tablolar çevredeki bazı yenik olduğunu gösterir.

quite an extensive answer on the DBA site iki nesne türleri arasındaki farklar bakarak yazdım. Bu da disk vs hakkında soru hafıza (ikisi arasında davranış bakımından önemli bir fark göremedim) adresleri.

Bir tablo değişkeni vs kullanma zamanı olarak yerel geçici tablo ama başlıktaki soru ile ilgili her zaman bir seçeneğin yok. Örneğin işlevler yalnızca Olası değişken ve alt kapsamda tabloya yazmak istiyorsanız o zaman #temp tek bir tablo yapacak bir tablo kullanmaktır (tablo değerli parametreleri readonly access izin ver).

Bir seçim yapmak bazı öneriler.

  1. Eğer örtülü UNIQUE PRIMARY KEY bir kısıtlama ile oluşturulan edilemez bir dizin ihtiyacın olursa o zaman mümkün tablo değişkenleri bu yaratmak değildir #temporary bir tablo gerekir. (Bu dizinler örnekleri INCLUDEd sütunları ile benzersiz olanları, süzülmüş dizinler olmayan). NB: 2014 benzersiz olmayan dizinler satır içi tablo değişkenleri için ilan edilmesi için izin verir SQL Server.
  2. Eğer sürekli ve tablodan çok sayıda satır ekleme ve silme olacak sonra #temporary bir tablo kullanın. DELETE TRUNCATE aşağıda, ayrıca sonraki ekler oDELETE as illustrated herebir sonraki daha iyi performans daha verimli olan TRUNCATE destekler.
  3. Eğer en iyi planı tablo kullanarak veri bağlı değişir eğer #temporary bir tablo kullanın. Bu plan dinamik verilere göre çekirdekler sağlayan istatistik oluşturma saklı yordamları önbelleğe alınan geçici tablolar için the recompilation behaviour ayrı olarak anlaşılması gerekir olsa) destekler.
  4. Eğer en uygun planı için bir sorgu kullanarak tablo olası her değişiklik sonra da bir düşünün bir tablo değişkeni geçmek yükü istatistikler oluşturma ve yeniden derler (ki muhtemelen gerektiren ipuçları için düzeltme planı istediğiniz).
  5. Eğer veri tablosuna eklenen kaynak potansiyel olarak pahalı SELECT ifadesinden sonra bir tablo değişkeni kullanarak bu paralel bir plan kullanma imkanı engeller düşünün.
  6. Eğer tablodaki verileri dış kullanıcı bir hareketi geri alma hayatta kalmak için ihtiyacınız varsa o zaman bir tablo değişkeni kullanın. Bu olası bir senaryo uzun bir SQL parti içinde farklı adımların ilerleme günlüğü olabilir.
  7. Kullanırken bir #temp tablo içindeki bir kullanıcı işlem kilitleri olabilir düzenlendi daha fazla tablo değişkenleri (potansiyel olarak sonuna kadar işlem vs son tablosu bağımlı tip kilit ve izolasyon seviyesi) ve de bunu önlemek kesilme tempdb işlem günlüğü kadar kullanıcı işlem biter. Bu tablo değişkenleri iyilik olabilir.
  8. Saklı yordamları içinde tablo değişkenleri ve geçici tablolar her ikisi de önbelleğe alınabilir. Önbelleğe alınan değişkenler tablo için meta bakım #temporary tablolar için daha kısa. Bob Ward bu yüksek eşzamanlılık koşullar altında sistem tabloları ek çekişme neden olabilir tempdb presentation onun işaret ediyor. Veri küçük miktarlarda ile uğraşırken ayrıca bu a measurable difference to performance yapabilirsiniz.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • DominicFear

    DominicFear

    30 Kasım 2006
  • pissengehen

    pissengehen

    26 EYLÜL 2006
  • Tube Time

    Tube Time

    14 Mayıs 2013