Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

दिनांक + समय से दिनांक प्राप्त करने के लिए SQL सर्वर में सबसे प्रभावी तरीका?

मुझे स्वीकार करना होगा कि मैंने पहले मैट द्वारा दिखाए गए फ्लोर-फ्लोट रूपांतरण को नहीं देखा था। मुझे इसका परीक्षण करना था।

मैंने एक शुद्ध चयन का परीक्षण किया (जो दिनांक और समय लौटाएगा, और वह नहीं है जो हम चाहते हैं), यहां शासन करने वाला समाधान (फर्श-फ्लोट), एक आम 'बेवकूफ' यहां वर्णित है (स्ट्रिंग कन्वर्ट) और यहां उल्लेख किया गया है कि मैं था का उपयोग करना (जैसा कि मुझे लगा कि यह सबसे तेज़ था)।

मैंने एक परीक्षण-सर्वर MS SQL Server 2005 पर Win 2003 SP2 सर्वर पर चल रहे एक Xeon 3GHz CPU के साथ अधिकतम मेमोरी (32 बिट, तो यह लगभग 3.5 Gb) पर चल रहे प्रश्नों का परीक्षण किया। यह रात है जहाँ मैं हूँ इसलिए मशीन लगभग बिना किसी भार के बेकार पड़ी है। मेरे पास यह सब मेरे पास है।

यहाँ मेरे टेस्ट-रन से लॉग एक बड़ी तालिका से चुनी गई है जिसमें टाइमस्टैम्प शामिल हैं जो मिलीसेकंड स्तर तक भिन्न हैं। इस विशेष डेटासेट में 2.5 वर्ष से अधिक की तिथियां शामिल हैं। तालिका में ही 130 मिलियन से अधिक पंक्तियां हैं, इसलिए मैं शीर्ष मिलियन तक सीमित हूं।

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 सर्वर पार्स और संकलन समय:CPU समय =0 ms, बीता हुआ समय =1 ms.

(1000000 पंक्ति(पंक्तियाँ) प्रभावित) तालिका 'tblMeasureLogv2'। स्कैन काउंट 1, लॉजिकल रीड्स 4752, फिजिकल रीड्स 0, रीड-फॉरवर्ड रीड्स 0, लोब लॉजिकल रीड्स 0, लोब फिजिकल रीड्स 0, लोब रीड-आगे रीड्स 0।

SQL सर्वर निष्पादन समय:CPU समय =422 ms, बीता हुआ समय =33803 ms.

(1000000 पंक्ति(पंक्तियाँ) प्रभावित) तालिका 'tblMeasureLogv2'। स्कैन काउंट 1, लॉजिकल रीड्स 4752, फिजिकल रीड्स 0, रीड-फॉरवर्ड रीड्स 0, लोब लॉजिकल रीड्स 0, लोब फिजिकल रीड्स 0, लोब रीड-आगे रीड्स 0।

SQL सर्वर निष्पादन समय:CPU समय =625 ms, बीता हुआ समय =33545 ms.

(1000000 पंक्ति(पंक्तियाँ) प्रभावित) तालिका 'tblMeasureLogv2'। स्कैन काउंट 1, लॉजिकल रीड्स 4752, फिजिकल रीड्स 0, रीड-फॉरवर्ड रीड्स 0, लोब लॉजिकल रीड्स 0, लोब फिजिकल रीड्स 0, लोब रीड-आगे रीड्स 0।

SQL सर्वर निष्पादन समय:CPU समय =1953 ms, बीता हुआ समय =33843 ms.

(1000000 पंक्ति(पंक्तियाँ) प्रभावित) तालिका 'tblMeasureLogv2'। स्कैन काउंट 1, लॉजिकल रीड्स 4752, फिजिकल रीड्स 0, रीड-फॉरवर्ड रीड्स 0, लोब लॉजिकल रीड्स 0, लोब फिजिकल रीड्स 0, लोब रीड-आगे रीड्स 0।

SQL सर्वर निष्पादन समय:CPU समय =531 ms, बीता हुआ समय =33440 ms। SQL सर्वर पार्स और संकलन समय:CPU समय =0 ms, बीता हुआ समय =1 ms.

SQL सर्वर निष्पादन समय:CPU समय =0 ms, बीता हुआ समय =1 ms.

हम यहाँ क्या देख रहे हैं?

आइए CPU समय पर ध्यान दें (हम रूपांतरण देख रहे हैं), और हम देख सकते हैं कि हमारे पास निम्नलिखित संख्याएँ हैं:

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

इससे मुझे ऐसा लगता है कि डेटएड (कम से कम इस विशेष मामले में) फ्लोर-कास्ट विधि से थोड़ा तेज है।

आपके वहां जाने से पहले, मैंने इस परीक्षण को कई बार चलाया, प्रश्नों के क्रम में बदलाव, समान-ईश परिणाम।

क्या यह मेरे सर्वर पर कुछ अजीब है, या क्या?



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर में अस्थायी तालिकाओं का परिचय

  2. अनुपलब्ध आर्टिफ़ैक्ट com.microsoft.sqlserver:sqljdbc4:jar:4.0

  3. T-SQL का उपयोग करके SQL सर्वर एजेंट XP को कैसे सक्षम करें

  4. डेटाटाइम 2 डेटा प्रकार को डेटाटाइम डेटा प्रकार में बदलने से परिणाम सीमा से बाहर हो जाते हैं

  5. SQL सर्वर डेटाबेस (T-SQL) से डेटा फ़ाइल कैसे निकालें