DÜZENLE:
Lütfen Martin'in yorumlarına bakınız:
CTE, bellekte bir tablo olarak gerçekleşmez. Bu sadece bir sorgu tanımını içine almanın bir yoludur. OP durumunda, satır içi olacak ve sadece yaptığınız gibi olacak SELECT Column1, Column2, Column3 FROM SomeTable
. Çoğu zaman önden gerçekleşmezler, bu yüzden satır döndürmez WITH T(X) AS (SELECT NEWID())SELECT * FROM T T1 JOIN T T2 ON T1.X=T2.X
, idam planlarını da kontrol edin. Rağmen bazen bir makara almak için planı kesmek mümkündür. Bunun için ipucu isteyen bir bağlantı maddesi var. - Martin Smith 15 Şubat'ta saat 17: 08'de
Orijinal cevap
CTE
MSDN hakkında daha fazla bilgi edinin
Bir CTE bellekte kullanılan tabloyu yaratır, ancak yalnızca onu takip eden belirli sorgu için geçerlidir. Özyinelemeyi kullanırken, bu etkili bir yapı olabilir.
Bir tablo değişkeni kullanmayı da düşünebilirsiniz. Bu, kullanılan olarak geçici bir tablo kullanılır ve birleştirme her biri için tekrar hayata yapılmasına gerek kalmadan birden fazla kez kullanılabilir. Ayrıca, şimdi birkaç kayıt tutmanız gerekiyorsa, bir sonraki seçimden sonra bir kaç kayıt daha ekleyin, başka bir işlemden sonra bir kaç kayıt daha ekleyin, sonra sadece bu kayıtların bir kısmını geri getirin, o zaman bu kullanışlı bir yapı olabilir. İnfazdan sonra düşürülmeye gerek yok. Çoğunlukla sadece sözdizimsel şeker. Ancak, satır sayısını düşük tutarsanız, hiçbir zaman diske aktarılmaz. Bkz SQL Server geçici masa ve masa değişkeni arasındaki fark nedir? daha fazla ayrıntı için.
Sıcaklık tablosu
MSDN hakkında daha fazla bilgi edinin - Yolun yaklaşık% 40'ını aşağı kaydırın
Temp tablo tam anlamıyla diskte oluşturulan bir tablodur, sadece herkesin silinebileceğini bildiği belirli bir veritabanında. Artık ihtiyaç duyulmadığında bu tabloları imha etmek iyi bir dev'ın sorumluluğudur, ancak bir DBA da onları silebilir.
Geçici tablolar iki çeşittir: Yerel ve küresel. MS Sql Sunucusu açısından, #tableName
yerel bir atama ve ##tableName
genel atama kullanırsınız (tanımlayıcı karakteristik olarak tek veya çift # kullanımına dikkat edin).
Tablo değişkenleri veya CTE'nin yerine temp tablolarıyla kelimenin normal anlamındaki meşru tabloları olduğu için indeksleri ve benzerlerini uygulayabildiğinizi unutmayın.
Genelde temp tabloları daha uzun veya daha büyük sorgular için ve CTE'ler veya tablo değişkenleri zaten küçük bir veri setine sahip olsaydım ve küçük bir şey için hızlıca biraz kod yazmayı isterdim. Tecrübe ve başkalarının tavsiyesi, ondan az sayıda satırın geldiği CTE'leri kullanmanız gerektiğini gösterir. Çok sayıda numaranız varsa, büyük olasılıkla temp tablosundaki indeksleme özelliğinden yararlanabilirsiniz.