क्या mysql में डेटाइम फील्ड को इंडेक्स करना एक अच्छा विचार है?


137

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

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

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

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


जवाबों:


164

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

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

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


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

4
+1 के लिए 'लोगों को जोड़ दिया जाता है और जहाँ क्लॉस होता है'। अनुक्रमण रणनीति के लिए अंगूठे का एक बड़ा नियम। जाहिर है अब मैं इसके बारे में सोचता हूं, लेकिन इससे पहले मेरे साथ नहीं हुआ था
Gaz_Edge

1
लेकिन यदि आप डेटा को दिनांक सीमा के साथ क्वेरी करते हैं , जैसे डेटा रेंज "2017-01-01 11:20" से "2018-01-03 12:12", तो यह SELECTक्वेरी को तेज नहीं करता है, भले ही मैं date timeकॉलम को अनुक्रमित करता हूं । जब मैं equalऑपरेशन का उपयोग करता हूं तो सूचकांक तेजी से क्वेरी करता है .. क्या मैं सही हूं?
user3595632

1
अगर DAY (datetime) या HOUR (डेटाटाइम) जैसे समय के कार्यों के साथ डेटाटाइम फ़ील्ड को क्वेरी करने के बारे में कैसे। क्या इस मामले में सूचकांक मदद करेगा या बाधा डालेगा?
क्रोनोकली

hi @Explosion Pills, अगर मुझे केवल वर्ष और महीने पर तालिका आधार को क्वेरी करने की आवश्यकता है, तो क्या मुझे बेहतर प्रदर्शन मिलेगा यदि मैंने केवल वर्ष और महीने के साथ एक नया स्तंभ बनाया है, तो इसे सीधे अनुक्रमित स्तंभ के सूचकांक बनाने के बजाय इसे अनुक्रमित करें ? जैसे कि मैं एक कॉलम बनाता हूं जिसका मूल्य 201801 जैसा है।
वुड्स चेन

18

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


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

62
बेहतर? मुझे संदेह है कि एक यूनिक्स टाइमस्टैम्प सभी मामलों के लिए बेहतर है । हां, एक पूर्णांक को संचय करना आमतौर पर एक स्ट्रिंग को संग्रहीत करने की तुलना में अधिक तेज़ होता है, लेकिन MySQL एक्सपोज़ के बारे में सभी डेटटाइम फ़ंक्शन क्या हैं ? खुद को लागू करने से या तो प्रदर्शन या कार्यक्षमता पर नकारात्मक प्रभाव पड़ेगा।
ग्रेग
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.