SORU
25 EYLÜL 2008, PERŞEMBE


Tarih her zaman SQL Server en etkili yolu?

MS SQL 2000 ve bir datetime verilen 2005, böyle '2008-09-25 12:34:56 bir datetime sadece içeren almak için en etkili yolu nedir' '2008-09-25' olarak mı?

Çoğaltılamaz here.

CEVAP
29 EYLÜL 2008, PAZARTESİ


Önce kat-şamandıra dönüşüm Matt tarafından gösterilen görmediğimi itiraf etmeliyim. Bu test etmek zorunda kaldım.

Test ettim bir saf seçin (hangi olacak dönüş Tarih ve Zaman, ve ne istiyoruz), hükümdarlık çözüm burada (kat-şamandıra), ortak bir 'saf' bir söz (stringconvert) ve bir sözü burada olduğumu kullanarak (ben öyle sanıyordum en hızlı).

Ben test sorgular, test server, MS SQL Server 2005 çalıştıran bir Win Server 2003 SP2 ile bir " çok çekirdekli 3 GHz İŞLEMCİ üzerinde çalışan max bellek (32 bit, yani yaklaşık 3.5 Gb). Makine neredeyse hiç yükte boyunca rölantide yani nerede olduğumu gece. Kendim için aldım.

İşte benim günlük test-run büyük bir tablo zaman milisaniye seviyesine kadar değişen içeren seçme. Bu belirli bir veri kümesi tarihleri 2.5 yıl arasında değişen içerir. Milyon üstüne ben kısıtlamak yüzden 130 milyon satır kendisi, tablo.

SELECT TOP 1000000 CRETS FROM tblMeasureLogv2 
SELECT TOP 1000000 CAST(FLOOR(CAST(CRETS AS FLOAT)) AS DATETIME) FROM tblMeasureLogv2
SELECT TOP 1000000 CONVERT(DATETIME, CONVERT(VARCHAR(10), CRETS, 120) , 120) FROM tblMeasureLogv2 
SELECT TOP 1000000 DATEADD(DAY, DATEDIFF(DAY, 0, CRETS), 0) FROM tblMeasureLogv2

SQL Server çözümleme ve derleme: = 0 ms, elapsed time = 1 ms. CPU süresi

(1000000 satır(lar) etkilenen) 'tblMeasureLogv2'. Tablo 1, okur 4752, fizik 0, ileri okuma okuma mantıksal tarama sayısı okur 0, 0 okur, lob fiziksel okuma ileri okuma 0 okuma 0 lob, lob mantıklı.

SQL Server Yürütme Times: = 422 ms, elapsed time = 33803 CPU süresi ms.

(1000000 satır(lar) etkilenen) 'tblMeasureLogv2'. Tablo 1, okur 4752, fizik 0, ileri okuma okuma mantıksal tarama sayısı okur 0, 0 okur, lob fiziksel okuma ileri okuma 0 okuma 0 lob, lob mantıklı.

SQL Server Yürütme Times: = 625 ms, elapsed time = 33545 CPU süresi ms.

(1000000 satır(lar) etkilenen) 'tblMeasureLogv2'. Tablo 1, okur 4752, fizik 0, ileri okuma okuma mantıksal tarama sayısı okur 0, 0 okur, lob fiziksel okuma ileri okuma 0 okuma 0 lob, lob mantıklı.

SQL Server Yürütme Times: = 1953 ms, elapsed time = 33843 CPU süresi ms.

(1000000 satır(lar) etkilenen) 'tblMeasureLogv2'. Tablo 1, okur 4752, fizik 0, ileri okuma okuma mantıksal tarama sayısı okur 0, 0 okur, lob fiziksel okuma ileri okuma 0 okuma 0 lob, lob mantıklı.

SQL Server Yürütme Times: = 531 ms, elapsed time = 33440 CPU süresi ms. SQL Server çözümleme ve derleme: = 0 ms, elapsed time = 1 ms. CPU süresi

SQL Server Yürütme Times: = 0 ms, elapsed time = 1 CPU süresi ms.

Burada ne görüyoruz?

CPU zaman odaklanalım (dönüşüm bakıyoruz), ve aşağıdaki numaraları var olduğunu görüyoruz:

Pure-Select:  422
Floor-cast:   625
String-conv: 1953
DateAdd:      531

Bu Öncesi (en azından bu durumda) döşeme-dökme yöntemine göre biraz daha hızlı gibi geldi bana.

Oraya gitmeden önce, bu testi birkaç kez, sorguları değişti emri ile aynı gibi sonuçlar koştum.

Bu şey benim server ya ne garip?

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Michael Lummio

    Michael Lumm

    25 Mayıs 2007
  • TSE

    TSE

    12 Kasım 2012
  • William Hyde

    William Hyde

    23 HAZİRAN 2008