2011-01-04 14 views
35

मुझे यह कहकर शुरू करना है कि मैंने कई समान प्रश्नों को देखा है, लेकिन उनमें से सभी Timestamp और DateTime फ़ील्ड प्रकार से अनुक्रमण के बिना संबंधित हैं। कम से कम यह मेरी समझ है।MySQL इंटीजर बनाम डेटटाइम इंडेक्स

जैसा कि हम सभी जानते हैं, डेटटाइम की बात होने पर कुछ फायदे हैं। सूचकांक

  • सूचकांक
  • साथ पूर्णांक के साथ

    1. दिनांक समय: जब मानदंडों के आधार पर किया जाता है उन्हें एक मिनट के लिए ध्यान नहीं देते हुए, और तालिका के इंजन संभालने 10+ million records, जो क्वेरी तेजी से प्रदर्शन करेंगे साथ InnoDB है

      दूसरे शब्दों में, DateTime या int में यूनिक्स टाइमस्टैम्प के रूप में दिनांक और समय को स्टोर करना बेहतर है? ध्यान रखें कि किसी अंतर्निहित MySQL फ़ंक्शंस का उपयोग करने की आवश्यकता नहीं है।

      अद्यतन

      MySQL 5.1.41 (64 बिट) के साथ परीक्षण किया गया और 10 मिलियन रिकॉर्ड, प्रारंभिक परीक्षण int के पक्ष में महत्वपूर्ण गति अंतर दिखाया। tbl_dtDateTime और tbl_intint कॉलम के साथ दो टेबल का उपयोग किया गया था। कुछ परिणाम:

      SELECT SQL_NO_CACHE COUNT(*) FROM `tbl_dt`; 
      +----------+ 
      | COUNT(*) | 
      +----------+ 
      | 10000000 | 
      +----------+ 
      1 row in set (2 min 10.27 sec) 
      
      SELECT SQL_NO_CACHE COUNT(*) FROM `tbl_int`; 
      +----------+ 
      | count(*) | 
      +----------+ 
      | 10000000 | 
      +----------+ 
      1 row in set (25.02 sec) 
      
      SELECT SQL_NO_CACHE COUNT(*) FROM `tbl_dt` WHERE `created` BETWEEN '2009-01-30' AND '2009-12-30'; 
      +----------+ 
      | COUNT(*) | 
      +----------+ 
      | 835663 | 
      +----------+ 
      1 row in set (8.41 sec) 
      
      SELECT SQL_NO_CACHE COUNT(*) FROM `tbl_int` WHERE `created` BETWEEN 1233270000 AND 1262127600; 
      +----------+ 
      | COUNT(*) | 
      +----------+ 
      | 835663 | 
      +----------+ 
      1 row in set (1.56 sec) 
      

      मैं एक तालिका में दोनों क्षेत्रों के साथ एक और अद्यतन के रूप में shantanuo ने सुझाव दिया पोस्ट करेंगे। कई सर्वर क्रैश के बाद

      अद्यतन # 2

      अंतिम परिणाम :) इंट प्रकार काफी तेजी, कोई बात नहीं क्या क्वेरी चलाने गया था, गति अंतर कम या ज्यादा ऊपर दिए गए परिणामों के रूप में ही किया गया था।

      "अजीब" चीज देखी गई थी निष्पादन का समय उतना ही कम था जब दोनों फ़ील्ड प्रकार एक ही टेबल में संग्रहीत होते हैं। ऐसा लगता है कि MySQL यह समझने के लिए पर्याप्त स्मार्ट है कि दिनांक दिनांक और int दोनों में संग्रहीत होने पर मान समान होते हैं। इस विषय पर कोई दस्तावेज नहीं मिला है, इसलिए सिर्फ एक अवलोकन है।

    +0

    क्या आपने इसे आजमाया? एक त्वरित बेंचमार्क क्यों स्थापित नहीं करें और पता लगाएं? – ircmaxell

    +0

    हम जिस तरह से बात करते हैं उस पर काम करते हुए, मेरे हार्डवेयर के साथ 10 मिलियन रिकॉर्ड पॉप्युलेट करने में कुछ समय लगता है :) –

    +0

    सुनिश्चित करें कि आप अपने परीक्षण में SQL_NO_CACHE चुनें – coolgeek

    उत्तर

    5

    मेरी वृत्ति यह कहना है कि चींटियां हमेशा तेज होती हैं। मुझे लगता है कि आप InnoDB का उपयोग कर रहे हैं, बल्कि MyISAM से, लेकिन मैं InnoDB मामले में इस खंडन करने के लिए कुछ भी नहीं मिला है: हालांकि, यह मामला

    http://gpshumano.blogs.dri.pt/2009/07/06/mysql-datetime-vs-timestamp-vs-int-performance-and-benchmarking-with-myisam/

    संपादित जोड़ने के लिए होने के लिए नहीं लगता है। इसके अलावा, एक ही लेखक एक InnoDB परीक्षण

    http://gpshumano.blogs.dri.pt/2009/07/06/mysql-datetime-vs-timestamp-vs-int-performance-and-benchmarking-with-innodb/

    +6

    सिर्फ इसलिए कि वह 'WHERE डेटाटाइम> UNIX_TIMESTAMP (' 1970-01-01 01:30:00 ') और डेटाटाइम

    9

    किया मुझे लगता है कि test mentioned in the above answer में, लेखक मूल रूप से यह साबित होता है कि UNIX time अग्रिम, INT जीत में गणना की जाती है जब।

    +0

    सीधे जवाब देने के लिए धन्यवाद – Armand

    संबंधित मुद्दे