2013-03-15 3 views
80

मैं एक बड़े डेटाबेस को डिजाइन करने पर काम कर रहा हूं। मेरे आवेदन में मेरे पास कई पंक्तियां होंगी उदाहरण के लिए मेरे पास वर्तमान में 4 मिलियन रिकॉर्ड वाली एक तालिका है। मेरे अधिकांश प्रश्न डेटा चुनने के लिए डेटाटाइम क्लॉज का उपयोग करते हैं। क्या mysql डेटाबेस में डेटाटाइम फ़ील्ड को इंडेक्स करना अच्छा विचार है?क्या mysql में डेटाटाइम फ़ील्ड को इंडेक्स करना अच्छा विचार है?

Select field1, field2,.....,field15 
from table where field 20 between now() and now + 30 days 

मैं अपने डेटाबेस अच्छा काम कर रखने के लिए कोशिश कर रहा हूँ और प्रश्नों को सुचारू रूप से चलाया जा रहा

अधिक, क्या विचार आपको लगता है कि मैं एक उच्च दक्षता डेटाबेस बनाने के लिए होना चाहिए करते हैं?

उत्तर

102

MySQL की स्थिति के बीच पंक्तियों के उन्मूलन सहित कई कारणों से के लिए अनुक्रमित उपयोग करने की सलाह: http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html

यह एक सूचकांक के लिए अपने datetime स्तंभ एक उत्कृष्ट उम्मीदवार बनाता है अगर आप प्रश्नों में अक्सर की स्थिति में इसका उपयोग करने जा रहे हैं। यदि आपकी एकमात्र हालत BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 30 DAY) है और आपके पास इस शर्त में कोई अन्य अनुक्रमणिका नहीं है, तो MySQL को प्रत्येक क्वेरी पर पूर्ण तालिका स्कैन करना होगा। मुझे यकीन नहीं है कि 30 दिनों में कितनी पंक्तियां उत्पन्न होती हैं, लेकिन जब तक यह कुल पंक्तियों में से 1/3 से कम है, तो कॉलम पर एक इंडेक्स का उपयोग करने के लिए यह अधिक कुशल होगा।

एक कुशल डेटाबेस बनाने के बारे में आपका प्रश्न बहुत व्यापक है। मैं केवल यह सुनिश्चित करने के लिए कहूंगा कि यह सामान्यीकृत है और सभी उचित कॉलम अनुक्रमित हैं (यानी जो जुड़ने में उपयोग किए जाते हैं और जहां खंड)।

+3

स्पष्टीकरण के लिए धन्यवाद। वह वास्तव में मदद करता है। मुझे यकीन है कि मेरे पास और अधिक फ़िल्टर होंगे। मैं सिर्फ यह सुनिश्चित करना चाहता हूं कि इंडेक्सिंग डेटाटाइम फ़ील्ड एक अच्छा विचार है या नहीं, क्योंकि हमारे पास डुप्लिकेट दिनांक समय हो सकता है। लेकिन आपने इसका उत्तर दिया है :) धन्यवाद – Jaylen

+3

+1 'जो लोग शामिल होते हैं और जहां खंड' में उपयोग किए जाते हैं। एक अनुक्रमण रणनीति के लिए अंगूठे का एक बड़ा नियम। स्पष्ट अब मैं इसके बारे में सोचता हूं, लेकिन –

7

Here लेखक द्वारा किए गए परीक्षणों से पता चला कि पूर्णांक यूनिक्स टाइमस्टैम्प डेटटाइम से बेहतर है। नोट, उसने MySQL का उपयोग किया। लेकिन मुझे कोई फर्क नहीं पड़ता कि आप पूर्णांक की तुलना में उपयोग किए जाने वाले डीबी इंजन की तारीखों की तुलना में थोड़ा तेज़ हैं इसलिए डेट इंडेक्स से इंटेल इंडेक्स बेहतर है। टी 1 लें - 2 तिथियों की तुलना करने का समय, टी 2 - 2 पूर्णांक की तुलना करने का समय। अनुक्रमित फ़ील्ड पर खोजें लगभग ओ (लॉग (पंक्तियां) समय लेता है क्योंकि कुछ संतुलित पेड़ पर आधारित सूचकांक - यह विभिन्न डीबी इंजनों के लिए अलग हो सकता है लेकिन फिर भी लॉग (पंक्तियां) आम अनुमान है। (यदि आप बिटमैस्क या आर-पेड़ आधारित इंडेक्स का उपयोग नहीं करते हैं)। तो अंतर है (टी 2-टी 1) * लॉग (पंक्तियां) - यदि आप अक्सर अपनी क्वेरी निष्पादित करते हैं तो भूमिका निभा सकते हैं।

+0

से पहले मुझे नहीं हुआ था धन्यवाद। मैं उस बारे में एक विकल्प के रूप में सोच रहा था लेकिन उसे नहीं पता था कि इसे कैसे पहुंचाया जाए। मेरा मानना ​​है कि आप बिल्कुल सही पूर्णांक हमेशा तेज होते हैं। – Jaylen

+26

बेहतर? मुझे संदेह है कि एक यूनिक्स टाइमस्टैम्प _all_ मामलों के लिए बेहतर है। हां, एक पूर्णांक संग्रह करना आमतौर पर स्ट्रिंग को संग्रहीत करने से तेज़ होता है, लेकिन सभी [डेटटाइम फ़ंक्शंस] के बारे में क्या होता है (http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html) MySQL खुलासा करता है? उन्हें स्वयं लागू करने से या तो प्रदर्शन या कार्यक्षमता पर नकारात्मक प्रभाव पड़ता है। – Greg

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