
Common Table Expressions(CTE)
SQL SERVER’da sorgu yazarken bazen farklı tabloları birleştirmek durumunda kalırız,çünkü farklı tablolardaki bilgilere ihtiyaç duyarız.Bunun için view ve geçici tablo oluşturabiliriz.Fakat bazen tablolar ile çalışmak iyi olmayabiliyor.Bunun için CTE dediğimiz sorgu ifadelerini kullanabiliriz.Cte ile sorgularımıza ön sorgu ekleyebiliriz.O zaman bir örnek ile başlayalım.Şimdi bir örneği cte kullanarak ve kullanmayarak gösterelim.
1
2
3
4
|
SELECT UrunModel.CatalogDescription, Color, Size
FROM Production.Product AS Urun INNER JOIN Production.ProductModel
AS UrunModel ON
Urun.ProductModelID = UrunModel.ProductModelID
|
1
2
3
4
5
|
WITH URUNKATALOG
AS(SELECT CatalogDescription,ProductModelID From Production.ProductModel )
Select URUNKATALOG.CatalogDescription,Urun.Color,Urun.Size from Production.Product as Urun
INNER JOIN URUNKATALOG
on Urun.ProductModelID=URUNKATALOG.ProductModelID
|
Şimdi yukarıdaki cte ile yazdığımız sorgumuzun execution planına bakalım.
Bu sorgu için Sql Server üzerinde PK_ProductModel adında bir clustered index buldu.”Clustered index scan” işlemi yaptı.% 23 ifadesinden tüm çabanın indeksi okumak için verilmediği anlaşılıyor.Marge join kullanıldığı için öncelikle tablolar sıralı hale getiriliyor.Marge join de tablolar aynı anda taranır ve aynı anda 2 tablonun birer satırı okunur.Bunun avantajını büyük tablolu veritabanlarında görürüz.Tablolar sıralı değilse öncelikle sıralı hale getirilmesi gerekir.Product tablosu ProductModelID ye göre sıralı olsaydı sort işlemi yapılmazdı.Doğrudan “Clustered index scan” işlemi yapılırdı.
Yorum ( 1 )
Faydalı ve güzel bilgiler teşekkürler