Sql Server Veri Cekme Testim
-
Arkadaslar bu soru uzunca bir zamandir kafamda vardi.
Hangi metodla daha hizli veriler cekilebilir diye, SQLClient mi , ODBC mi , Entity Framework mu, T-SQL fonksiyon mu diye.
Bende ufak bi test yapayim dedim. Testi 10 defa calistirip ortalamalarini aldim
(Islem) Basglanti saglaniyor -> Veri cekiliyor -> DataGridView'e aktariliyor -> Baglanti kapatiliyor
Su sekilde yaptim
Oncelikle serverda(localhost) "tests" adinda bir veritabani olusturdum
USE [tests] GO /****** Object: Table [dbo].[many_data] Script Date: 03/10/2017 13:31:01 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[many_data]( [id] [int] IDENTITY(1,1) NOT NULL, [data1] [nvarchar](max) COLLATE Greek_CI_AS NULL, [data2] [nvarchar](max) COLLATE Greek_CI_AS NULL, [data3] [nvarchar](max) COLLATE Greek_CI_AS NULL, CONSTRAINT [PK_many_data] PRIMARY KEY CLUSTERED ( [id] ASC )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY]
3 sutunlu bu tablonun icine 1.000.000 kayit ekledim asagidaki sorgu ile
declare @start int; declare @end int; set @start=1; set @end = 1000000; declare @i int; set @i=@start; while @i <= @end begin insert into many_data values ( NEWID(),NEWID(),NEWID() ) set @i = @i+1; end
Daha sonra sql server icinde fonksiyon olusturdum
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE FUNCTION hepsini_oku () RETURNS TABLE AS RETURN ( SELECT * FROM many_data ) GO
Daha sonra C# ile "select * from many_data" sorgusunu ustte belirttigim 4 metodla calistirdim ve sonuclar su sekilde oldu
VS2010 - Projeyi buradan indirebilirsiniz
SQLClient entity ile asagi yukari ayni sonuc veriyor
EDIT : Fonksiyonu eklemeyi unutmusum
dhmm tarafından 10/Mar/17 13:45 tarihinde düzenlenmiştir -
Güzel bir test. Join işlemi olunca nasıl bir değişim gösterecek merak ettim açıkcası.
-
ontedi bunu yazdı
Güzel bir test. Join işlemi olunca nasıl bir değişim gösterecek merak ettim açıkcası.
hmm... aksama join olayi da ekleyebilirim. birde wcf ile cekme fln da koyabilirm. Bir suru cvp aldim hocam sonunda kendim deniyim dedim
-
entity'de cache kullanıyormusun ?
-
Peki, Entity'de SP kullanmak ne kadar mantıklı?
-
rakkoc bunu yazdı
entity'de cache kullanıyormusun ?
Yok kullanmiyorum.Lakin bir sorguyu tekrar calistirdiginda kendi cache tutuyor mu onu tam bilmioyrum ?
Soyle bir sey var entity ile ilk calistirilan sorgu cold query sonraki digerleri warm query oluyormus ve daha hizli calisiyormus. Ayrica EF5 kullandim. EF6 context creation kisminda EF4 ve EF5 e gore daha yavas.
-
ontedi bunu yazdı
Peki, Entity'de SP kullanmak ne kadar mantıklı?
Hocam bu isi profesyonel olarak yapmiyorum... Profesyonel arkadaslar daha iyi yanitlar verebilir.
Performans acisindan ne kdr hizlidir bilmiyorum. Test etmek lzm :))).
SP ler sanirsam raw queryden daha hizli performans veriyor.Tabi SP kullanmak goze de daha anlasilir geliyor...
Birde kisilerin calistigi sirketlerin bir standardi olabilir SP ler. Yani Projeler o sekilde gelistirilebilir bir secenektir.
-
Merhaba,
Güzel bir test olmuş. Fakat karmaşık sorgularda bu testin nasıl bir sonuç vereceğini merak ediyorum. Bizim yaptığımız sql sorgularında en az 12-13 tabloya bağlanma ihtiyacı duyuyoruz. heleki left joinlerde bu sorgular çoğalıyor.
String birleştirme işlemlerinde yine sql serverın sorgu döndürme hızı fark ediyor. Güzel bir datayla bu işlemi test etmek daha doğru sonuca vardıracaktır. Ayrıca Function kullanmışsın. Sp ile denemekte yarar var tabi parametreler ile birlikte..
-
_DevLop_ bunu yazdı
Merhaba,
Güzel bir test olmuş. Fakat karmaşık sorgularda bu testin nasıl bir sonuç vereceğini merak ediyorum. Bizim yaptığımız sql sorgularında en az 12-13 tabloya bağlanma ihtiyacı duyuyoruz. heleki left joinlerde bu sorgular çoğalıyor.
String birleştirme işlemlerinde yine sql serverın sorgu döndürme hızı fark ediyor. Güzel bir datayla bu işlemi test etmek daha doğru sonuca vardıracaktır. Ayrıca Function kullanmışsın. Sp ile denemekte yarar var tabi parametreler ile birlikte..
Hocam evet soyle dedigin gibi 20 tablo 10 sutunlu ve id, nvarchar karisimi verilerden olusan. Herbiri 1.000.000 kayittan olusan bir test yapabilirim. JOIN vs kullanarak Isin icine WCF ve SP koyabilirim.
-
dhmm bunu yazdırakkoc bunu yazdı
entity'de cache kullanıyormusun ?
Yok kullanmiyorum.Lakin bir sorguyu tekrar calistirdiginda kendi cache tutuyor mu onu tam bilmioyrum ?
Soyle bir sey var entity ile ilk calistirilan sorgu cold query sonraki digerleri warm query oluyormus ve daha hizli calisiyormus. Ayrica EF5 kullandim. EF6 context creation kisminda EF4 ve EF5 e gore daha yavas.
o yüzden dependency injection kullanman gerekiyor :( query nin second level cache alması ile sorgu daha da hizlanacaktır.
-
rakkoc bunu yazdıdhmm bunu yazdırakkoc bunu yazdı
entity'de cache kullanıyormusun ?
Yok kullanmiyorum.Lakin bir sorguyu tekrar calistirdiginda kendi cache tutuyor mu onu tam bilmioyrum ?
Soyle bir sey var entity ile ilk calistirilan sorgu cold query sonraki digerleri warm query oluyormus ve daha hizli calisiyormus. Ayrica EF5 kullandim. EF6 context creation kisminda EF4 ve EF5 e gore daha yavas.
o yüzden dependency injection kullanman gerekiyor :( query nin second level cache alması ile sorgu daha da hizlanacaktır.
@rakkoc EF 5 te desteklemiyor galiba yada ben oyle anladim 2nd lev cache... Isin PRO'su sensin...
Soru : Dependecy Injection'u veri cekme yontemi icin kullanmaliyim dimi ? Dogru mu anlamisim ?
dhmm tarafından 10/Mar/17 16:43 tarihinde düzenlenmiştir