25-09-2009, 18:02
Merhaba arkadaşlar;
Access ile bir çok yürüyen bakiye denemeleri görmüşüzdür. Sql ile yine Sql de veya ado, dao da Dsum ile ya da başka hazır fonksiyonlarla. Ben de Sql serverda denemek istedim ve 3 farklı yol ile yaptım. Üçünde de süreler arasında çok fark var..
İlk önce deneme yapmak isteyen arkadaşlar için 20.000 kayıtlık tablo oluşturacak kodu verelim..
Tablomuz oluştu ve 20.000 kayıtlık 2 sütundan oluşan 2. sütundaki verilerin herbirinde 15 artan bir tablomuz var. (İlk 4 satır hariç)
Şimdi testlere geçebiliriz. En kötüsünden başlayalım yani SubQuery ile olandan..
Bu sorgu size tanıdık gelebilir aynısını Access te kullanabiliyoruz.
Bu sorgu yapısıyla 20.000 kayıtlık yürüyen bakiyeli bir sonuç : 1dk 41 saniye
2. yönteme geçelim, burda Cursor ile sonuç alacağız..
Bu yöntem ile sonuç 20.000 kayıtta 2 ya da 3 saniye sürmektedir. Oldukça başarılı..
Şimdi son testimizi yapalım burda local update yöntemini kullanacağız..
Veee sonuç 0-1 saniye arası.. İnanılmaz..
Ben aynı testleri 50.000 kayıt ile de yaptım ve sırayla 6 dakika, 7 saniye, 2 saniye olarak sonuç aldım..
Access ile bir çok yürüyen bakiye denemeleri görmüşüzdür. Sql ile yine Sql de veya ado, dao da Dsum ile ya da başka hazır fonksiyonlarla. Ben de Sql serverda denemek istedim ve 3 farklı yol ile yaptım. Üçünde de süreler arasında çok fark var..
İlk önce deneme yapmak isteyen arkadaşlar için 20.000 kayıtlık tablo oluşturacak kodu verelim..
SQL
- CREATE TABLE Satislar (SatID INT, Satis money)
- CREATE CLUSTERED INDEX ndx_SatID ON Satislar(SatID)
- GO
- INSERT Satislar VALUES (1,120)
- INSERT Satislar VALUES (2,60)
- INSERT Satislar VALUES (3,125)
- INSERT Satislar VALUES (4,40)
-
- DECLARE @SatID INT, @Satis money
- SET @SatID = 5
- SET @Satis = 10
-
- WHILE @SatID < 20000
- BEGIN
- INSERT Satislar VALUES (@SatID,@Satis)
- SET @SatID = @SatID + 1
- SET @Satis = @Satis + 15
- END
Tablomuz oluştu ve 20.000 kayıtlık 2 sütundan oluşan 2. sütundaki verilerin herbirinde 15 artan bir tablomuz var. (İlk 4 satır hariç)
Şimdi testlere geçebiliriz. En kötüsünden başlayalım yani SubQuery ile olandan..
SQL
- SELECT * , (SELECT SUM(satis) FROM satislar
- WHERE SatId<=bb.SatId) AS bbb
- FROM Satislar bb
Bu sorgu size tanıdık gelebilir aynısını Access te kullanabiliyoruz.
Bu sorgu yapısıyla 20.000 kayıtlık yürüyen bakiyeli bir sonuç : 1dk 41 saniye
2. yönteme geçelim, burda Cursor ile sonuç alacağız..
SQL
- CREATE TABLE #Satislar (SatID INT, Satis money, YuruyenToplam money)
-
- DECLARE @SatID INT,
- @Satis money,
- @YuruyenToplam money
-
- SET @YuruyenToplam = 0
-
- DECLARE bb_cursor CURSOR
- FOR
- SELECT SatID, Satis
- FROM Satislar
-
- OPEN bb_cursor
-
- FETCH NEXT FROM bb_cursor INTO @SatID,@Satis
-
- WHILE @@FETCH_STATUS = 0
- BEGIN
- SET @YuruyenToplam = @YuruyenToplam + @Satis
- INSERT #Satislar VALUES (@SatID,@Satis,@YuruyenToplam)
- FETCH NEXT FROM bb_cursor INTO @SatID,@Satis
- END
-
- CLOSE bb_cursor
- DEALLOCATE bb_cursor
-
- SELECT * FROM #Satislar ORDER BY SatID
-
- DROP TABLE #Satislar
Bu yöntem ile sonuç 20.000 kayıtta 2 ya da 3 saniye sürmektedir. Oldukça başarılı..
Şimdi son testimizi yapalım burda local update yöntemini kullanacağız..
SQL
- DECLARE @Satislar TABLE (SatID INT, Satis money, YuruyenToplam money)
-
- DECLARE @YuruyenToplam money
-
- SET @YuruyenToplam = 0
-
- INSERT INTO @Satislar
- SELECT SatID, Satis, NULL
- FROM Satislar
- ORDER BY SatID
-
- UPDATE @Satislar
- SET @YuruyenToplam = YuruyenToplam = @YuruyenToplam + Satis
- FROM @Satislar
-
- SELECT * FROM @Satislar
Veee sonuç 0-1 saniye arası.. İnanılmaz..
Ben aynı testleri 50.000 kayıt ile de yaptım ve sırayla 6 dakika, 7 saniye, 2 saniye olarak sonuç aldım..
Javascript
- this.setState({sign:"Here comes the sun...."})


