'temp tablo arasındaki fark ne ve SQL Server'da değişken tablo?
SQL Server 2005'te, geçici tablolar iki şekilde oluşturabilirsiniz:
declare @tmp table (Col1 int, Col2 int);
ya
create table #tmp (Col1 int, Col2 int);
İkisi arasındaki farklar nelerdir? Bellekte @tmp hala Matrix Depolama Teknolojisi kullanıp kullanmadığını, ya da eğer her şey olursa üzerinde çelişkili görüşler okudum.
Hangi senaryoları bir çıkış gerçekleştirmek başka?
CEVAP
Web bağlantıyı yazıları gibi Matrix depolama teknolojisi kullanarak onlardan biri olmasa da Geçici Tablolar (#tmp) ve Tablo Değişkenleri (@tmp) arasında bazı farklar vardır.
Veri ve basit kullanım senaryoları, küçük ve orta ölçekli birimler için genel bir kural olarak, tablo değişkenleri kullanmalısınız. (Bu ders dışında, aşağıda bir sürü ve makaleleri takip fazlasıyla geniş bir kılavuz.)
Bazı ikisi arasında seçim yaparken dikkate alınması gereken noktalar:
Geçici Tablolar ve Dizinler OLUŞTURMA, vb gibi şeyler yapabilirsiniz, böylece gerçek tablo. Eğer dizin tarafından erişim daha hızlı olacaktır büyük miktarda veri varsa, o zaman geçici tablolar iyi bir seçenek.
Değişken tablo BİRİNCİL ANAHTAR veya BENZERSİZ kısıtlama kullanarak dizinler olabilir. Eğer benzersiz olmayan bir dizin (isterseniz sadece birincil anahtar vardır benzersiz son sütunu olarak sütun kısıtlaması. Eğer benzersiz bir sütun yok ise, kimlik sütunu kullanabilirsiniz.) SQL 2014 has non-unique indexes too.
Tablo değişkenleri hareketleri, ya da kilitleme günlük katılmayın. Bu yükü gerektirmeyen daha hızlı oldukları anlamına geliyor, ama diğer taraftan bu özellikleri alamadım. Yani örneğin eğer bir yordam aracılığıyla yarı yolda geri almak istiyorsanız o zaman tablo değişkenleri bu işlem sırasında doldurulan hala doldurulur!
Geçici tablolar, saklanan prosedürler çekirdekler olmak, belki de sık sık neden olabilir. Tablo değişkenleri.
Sen-ebilmek yaratmak bir geçici tablo kullanarak SEÇİN İÇİNE, daha hızlı yazmak için ad-hoc sorgulama) Mayıs için izin anlaşma ile değişen türleri zaman içinde, bu yana hiç gerek yok define geçici tablo yapısını ayarlıyoruz.
Tablo değişkenleri fonksiyonları geri ve mantığı çok daha kolay (örneğin bazı keyfi sınırlayıcı değerler bir tablo içine bir dize bölmek için bir işlevi yapmak) saklanması yeniden etkinleştirme iletebilirsiniz.
Kullanıcı tanımlı işlevlerde kullanarak Tablo Değişkenleri bu fonksiyonları daha yaygın olarak kullanılır. (ayrıntılı bilgi için FONKSİYON belgeleri OLUŞTURMA) sağlar. Eğer bir fonksiyon yazıyorsanız aksi takdirde zorlayıcı bir ihtiyaç yoksa temp tablo üzerinde tablo değişkenleri kullanmalısınız.
Tablo değişkenleri ve geçici tablolar tempdb içinde saklanır. Ama tablo değişkenleri (2005'den beri) Matrix Depolama Teknolojisi varsayılan harmanlama alan, geçerli veritabanı karşı geçici tablolar harmanlama (ref) varsayılan. Bunun anlamı olmalıdır farkında harmanlama sorunları kullanarak geçici tablolar ve db harmanlama farklı tempdb, neden sorunlar istiyorsanız karşılaştırın veri temp tablo ile veritabanındaki verileri.
(##Tmp) genel Geçici Tablolar, geçici tablo, başka tür tüm oturumlar ve kullanıcılar tarafından kullanılabilir.
Biraz daha fazla bilgi için:
Dba.stackexchange.com Martin Smith's great answer
İkisi arasındaki fark MSDN SSS: http://support.microsoft.com/default.aspx/kb/305977
MDSN blog makale: http://blogs.msdn.com/sqlserverstorageengine/archive/2008/03/30/sql-server-table-variable-vs-local-temporary-table.aspx
Makale: http://searchsqlserver.techtarget.com/tip/0,289483,sid87_gci1267047,00.html#