2009-12-04 14 views
63

यह शायद वास्तव में एक बेवकूफ सवाल है, लेकिन क्या डेटाबेस तालिका में एक बुलियन फ़ील्ड को अनुक्रमणित करने में बहुत लाभ होगा?इंडेक्सिंग बुलियन फ़ील्ड

एक सामान्य स्थिति को देखते हुए, जैसे "सॉफ्ट-डिलीट" रिकॉर्ड्स जो निष्क्रिय के रूप में फ़्लैग किए जाते हैं, और इसलिए अधिकांश प्रश्नों में WHERE deleted = 0 शामिल है, क्या यह उस क्षेत्र को अपने आप अनुक्रमित करने में मदद करेगा, या इसे अन्य सामान्य रूप से जोड़ा जाना चाहिए एक अलग सूचकांक में अलग क्षेत्रों?

+0

संभावित डुप्लिकेट [क्या बूलियन फ़ील्ड को अनुक्रमणित करने में कोई प्रदर्शन लाभ है?] (Http://stackoverflow.com/questions/10524651/is-there-any-performance-gain-in-indexing-a-boolean- क्षेत्र) –

+3

@AmirAliAkbari: ओह! नहीं! एक परिपत्र संदर्भ! उम्मीद है कि एसओ विस्फोट नहीं होगा! – Paul

उत्तर

51

सं

आप सूचकांक फ़ील्ड पर खोज की है और उच्च चयनात्मकता/प्रमुखता होती है। लगभग किसी भी तालिका में एक बुलियन फ़ील्ड की कार्डिनालिटी समाप्त हो जाती है। यदि कुछ भी आपके लेखों को धीमा कर देगा (ओह इतनी छोटी राशि से)।

शायद आप क्लस्टर्ड इंडेक्स में पहला फ़ील्ड बनायेंगे यदि हर क्वेरी में मुलायम हटाए गए हैं?

+2

हजारों पृष्ठों के साथ एक बड़ी किताब की कल्पना करें। पन्ने में एक अक्षर, 'ए' या 'बी' और यादृच्छिक संख्या होती है। क्या आपको एक निश्चित यादृच्छिक संख्या प्रविष्टि खोजने में लाभ होगा जिसके लिए आप जानते हैं कि यह 'ए' पृष्ठों में से एक पर है जब ए और बी पृष्ठ मिश्रित नहीं होते हैं, लेकिन पुस्तक केवल एक पृष्ठ के साथ शुरू होती है और फिर बी? हां आप .. तो मुझे लगता है कि आप गलत हैं .. – tObi

6

मुझे लगता है कि इससे मदद मिलेगी, खासकर सूचकांक को कवर करने में।

आपके डेटा और प्रश्नों पर निश्चित रूप से कितना/छोटा निर्भर है।

आप इंडेक्स के बारे में सभी प्रकार के सिद्धांतों को प्राप्त कर सकते हैं लेकिन वास्तविक डेटा के साथ डेटाबेस में डेटाबेस इंजन द्वारा अंतिम उत्तर दिए जाते हैं। और अक्सर आप उत्तर से आश्चर्यचकित होते हैं (या शायद मेरे सिद्धांत बहुत खराब हैं;)

अपने प्रश्नों की क्वेरी योजना की जांच करें और यह निर्धारित करें कि प्रश्नों में सुधार किया जा सकता है, या यदि सूचकांक में सुधार किया जा सकता है। सूचकांक को बदलने और यह देखने में काफी आसान है कि

+3

+1: मुझे कॉलम –

+2

@OMGPonies को अनुक्रमणित करने में हानि दिखाई नहीं दे रही है अतिरिक्त पंक्तियों के साथ एक व्यस्त तालिका पर अतिरिक्त अतिरिक्त ओवरहेड में नुकसान है , यह वास्तव में क्वेरी प्रदर्शन को कम कर सकता है। यह केवल एक लाभ है जब उच्च कार्डिनालिटी होती है और लाभ लेने के लिए प्रश्न बनाए जाते हैं। – oucil

1

मुझे लगता है कि यदि आप एक दृश्य (जहां हटाया गया = 0) का उपयोग कर रहे थे तो आप इससे मदद करेंगे और आप नियमित रूप से इस दृश्य से पूछताछ कर रहे हैं।

2

मुझे लगता है कि यदि आपका बुलियन फ़ील्ड ऐसा है कि आप कई मामलों में उनका जिक्र करेंगे, तो यह एक अलग टेबल, उदाहरण हटाए गए पेज, या स्पेशलपेज्स के लिए समझ में आता है, जिसमें is_deleted जैसे कई बूलियन प्रकार फ़ील्ड होंगे, is_hidden, is_really_deleted, requires_higher_user आदि, और फिर आप उन्हें प्राप्त करने के लिए शामिल होंगे।

आम तौर पर इस तालिका का आकार छोटा होगा और आपको शामिल होने से कुछ लाभ मिलेगा, खासकर जहां तक ​​कोड पठनीयता और रखरखाव का संबंध है। और क्वेरी के इस प्रकार के लिए:

select all pages where is_deleted = 1

यह इसे इस तरह से लागू किया है करने के लिए तेजी से होगा:

select all pages where pages 
inner join DeletedPages on page.id=deleted_pages.page_id 

मुझे लगता है कि मैं mysql डेटाबेस है कि आप में करने के लिए एक क्षेत्र की जरूरत के बारे में कहीं पढ़ा कम से कम उस क्षेत्र पर अनुक्रमण कार्य करने के लिए 3 की कार्डिनालिटी है, लेकिन कृपया इसकी पुष्टि करें।

+1

यह कहना मुश्किल है कि एक बूलियन इतना पतला है और हमारे पास कोई डेटा नहीं है, लेकिन इसमें शामिल होने और उसके वर्कफ़्लो में प्रत्येक प्रश्न पूछे जाने वाले प्रश्न धीमे, तेज नहीं होंगे, खासकर अगर प्राथमिक कुंजी अलग-अलग क्लस्टर हो और यदि प्रत्येक एकल क्वेरी के लिए हटाए गए_पृष्ठ तालिका की आवश्यकता थी। –

16

हटाए गए डेटा DATETIME कॉलम के बारे में क्या है? दो लाभ हैं।

  1. आप नाम की तरह एक अद्वितीय स्तंभ की जरूरत है, आप बना सकते हैं और
  2. (यदि आप deleted_at कॉलम और नाम पर एक अद्वितीय इंडेक्स का उपयोग करके) आप खोज कर सकते हैं एक ही नाम कई बार के साथ एक रिकॉर्ड नरम हटाना हाल ही में हटाए गए रिकॉर्ड के लिए।

आप क्वेरी ऐसा दिखाई दे सकता:

SELECT * FROM xyz WHERE deleted_at IS NULL 
0

आप डेटाबेस (जैसे ओरेकल के रूप में) बिटमैप अनुक्रमणिका का समर्थन करता है का उपयोग कर रहे हैं, तो एक बूलियन स्तंभ पर ऐसा सूचकांक की तुलना में बिना बहुत अधिक उपयोगी होगा तो।

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