Aylık arşivler: Ağustos 2011

Linked Server Join Sorgu Performansı

SQL Server üzerinde tanımladığımız Linked Server yapıları uzak sunucuya manual bağlanmadan kolayca sorgular çalıştırmamıza imkan tanır. Linked Server aynı zamanda yerel bir kaynak ile uzak sunucudaki bir kaynağı çağraz sorgulamamızı da (Join) destekler.

SELECT a.*, b.* FROM T1 a
	INNER JOIN ABC.Aliveris.dbo.T2 b
         ON a.SatirKodu1 = b.SatirKodu2

Bu sorgu yereldeki T1 ile ABC isimli uzak sunucu üzerindeki T2 tablosunu Join edip iki taraftaki kolonları listeleyecektir. Fakat bu özelliği kullanırken performans sorunu yaşayabiliriz. Çünkü SQL Server JOIN işlemini yapmadan önce uzak sunucudaki T2 tablosunu kendi tarafına alacak ardından ana sorguyu çalıştıracaktır. Eğer karşı tablo küçük ve bağlantı hızlı ise çok sorun olmayacaktır. Ancak T2 tablosu büyükse veya ağ bağlantısı düşükse performans sorunu yaşayabiliriz. Bu yüzden yerel sunucu ile uzak sunucuyu doğrudan JOIN etmek yerine uzak sunucudaki verileri kendi tarafımıza geçici veya kalıcı bir tabloya aktardıktan sonra JOIN etmemiz daha doğru olacaktır. Hatta tüm tabloyu değil de filtre vererek çekmemiz sadece ihtiyaç duyulan verilerin taşınmasını sağlayacaktır.
Ayrıca uzak sunucu sorgularında Distributed Query yöntemi yerine OpenQuery yönteminin kullanılması her zaman daha hızlı olacaktır. Distributed Query yöntemi, klasik linked server yazım biçimini temsil eder. Yani sorguların SELECT * FROM UzakSunucu.UzakVeriTabani.Şema.TabloAdi şeklinde çalıştırılmasıdır. Bu durumda yerel Query optimizer yol haritasını kendisi belirleyecektir. OpenQuery ise sözkonusu sorgunun yorumlanmadan doğrudan uzak sunucu üzerinde çalıştırılmasını sağlayan bir fonksiyondur. Bu yöntemde tüm yükü uzak sunucu üstlenmiş oluyor.
Konuyla ilgili detayları SQL Server Linked Server (Bağlı Sunucu)
makalemde bulabilirsiniz.

SQL Server 2008 GROUP BY GROUPING SETS GROUPING_ID ROLLUP CUBE

SQL Server eski sürümlerinden beri GROUP BY ile veri özetlemesini destekler ayrıca ara ve alt toplamlar için WITH ROLLUP ve WITH CUBE yantümcelerini sunar. SQL Server 2008, konuyla ilgili GROUPING SETS isimli yeni bir operatör sunmaktadır. Bu makalede bu konudaki değişiklikleri örneklendireceğiz. GROUP BY, WITH ROLLUP ve WITH CUBE yantümceleriyle ilgili detayı aşağıdaki makalemde bulabilirsiniz.
SQL’de veri özetleme ve gizli “OLAP raporlama”
Okumaya devam et