2008-10-23 23 views
82

मुझे एक बिंदु पर पढ़ना याद है कि कम कार्डिनालिटी (कम मूल्यों की एक कम संख्या) वाले क्षेत्र को अनुक्रमणित करना वास्तव में करने योग्य नहीं है। मैं मानता हूं कि मुझे यह नहीं पता कि इंडेक्स कैसे समझते हैं कि यह क्यों है।क्या मुझे SQL सर्वर में थोड़ा फ़ील्ड इंडेक्स करना चाहिए?

तो क्या हुआ अगर मैं इसे में 100 मिलियन पंक्तियों के साथ एक मेज है, और मुझे रिकॉर्ड जहां एक सा क्षेत्र 1 है का चयन कर रहा हूँ? और मान लीजिए कि किसी भी समय, केवल कुछ मुट्ठी भर रिकॉर्ड हैं जहां बिट फ़ील्ड 1 है (0 के विपरीत)। क्या यह उस बिट फ़ील्ड को अनुक्रमणित करने योग्य है या नहीं? क्यूं कर?

बेशक मैं सिर्फ यह परीक्षण कर सकते हैं और कार्य योजना लागू की जाँच करें, और मुझे लगता है कि क्या करेंगे, लेकिन मैं यह भी इसके पीछे सिद्धांत के बारे में उत्सुक हूँ। कार्डिनलिटी कब मायने रखती है और यह कब नहीं करती?

+0

यदि आपने इसे पढ़ा नहीं है, तो जेसन मैसी ने हाल ही में एक लेख लिखा था जिसने इस विषय पर चर्चा की थी। http://statisticsio.com/Home/tabid/36/articleType/ArticleView/articleId/302/Never-Index-a-BIT.aspx संपादित करें: नया आलेख स्थान - http://sqlserverpedia.com/blog/sql-server -ब्लॉगर्स/कभी-इंडेक्स-ए-बिट – Jeff

+0

अपने आप पर, न कि इसके परिणामस्वरूप बहुत कम चयनकता होती है। एक यौगिक सूचकांक के हिस्से के रूप में। काफी संभवतः लेकिन अन्य समानता कॉलम के बाद ही। –

+0

क्या यह एक आम प्रश्न है? रिकॉर्ड्स के "मुट्ठी भर" की तलाश करते समय यह लायक हो सकता है लेकिन अन्य पंक्तियों पर आपको बहुत मदद नहीं करेगा।क्या डेटा की पहचान करने के अन्य तरीके हैं? –

उत्तर

61

ध्यान दें कि एसक्यूएल में एक सूचकांक क्या है - और सूचकांक वास्तव में स्मृति के अन्य हिस्सों (यानी पॉइंटर्स को पंक्तियों) पर इंगित स्मृति का एक हिस्सा है। इंडेक्स पृष्ठों में टूटा हुआ है ताकि उपयोग के आधार पर इंडेक्स के हिस्सों को लोड किया जा सके और स्मृति से उतार दिया जा सके।

जब आप पंक्तियों के सेट के लिए पूछते हैं, तो SQL तालिका स्कैनिंग (प्रत्येक पंक्ति को देखकर) से अधिक तेज़ी से पंक्तियों को खोजने के लिए अनुक्रमणिका का उपयोग करता है।

एसक्यूएल क्लस्टर है और गैर क्लस्टर अनुक्रमित। क्लस्टर इंडेक्स की मेरी समझ यह है कि वे एक ही पृष्ठ में समान इंडेक्स मान समूह करते हैं। इस तरह जब आप इंडेक्स वैल्यू से मेल खाने वाली सभी पंक्तियों के लिए पूछते हैं, तो एसक्यूएल उन पंक्तियों को स्मृति के क्लस्टर पेज से वापस कर सकता है। यही कारण है कि एक GUID कॉलम को क्लस्टर इंडेक्स करने का प्रयास करना एक बुरा विचार है - आप यादृच्छिक मानों को क्लस्टर करने का प्रयास नहीं करते हैं।

जब आप एक पूर्णांक कॉलम को अनुक्रमित करते हैं, तो SQL की अनुक्रमणिका में प्रत्येक अनुक्रमणिका मान के लिए पंक्तियों का एक सेट होता है। यदि आपके पास 1 से 10 की रेंज है, तो आपके पास 10 इंडेक्स पॉइंटर्स होंगे। इस पर निर्भर करता है कि कितनी पंक्तियां हैं, इसे अलग-अलग पेज किया जा सकता है। आपकी क्वेरी से मेल सूचकांक "1" और उसके बाद जहां नाम "फ्रेड" (नाम स्तंभ अनुक्रमित नहीं है यह सोचते हैं) शामिल हैं के लिए लग रहा है, एसक्यूएल "1" मिलान बहुत जल्दी है, तो तालिका स्कैन बाकी को खोजने के लिए पंक्तियों के सेट हो जाता है।

तो एसक्यूएल वास्तव में क्या कर रहा है कामकाजी सेट को कम करने की कोशिश कर रहा है (पंक्तियों की संख्या) इसे फिर से चालू करना है।

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

हर कोई परीक्षण करने का कारण कहता है क्योंकि एसक्यूएल में एक बहुत ही चालाक और जटिल अनुकूलक होता है जो किसी तालिका को स्कैनिंग का निर्णय लेता है, या किसी प्रकार का उपयोग कर सकता है, या स्मृति पृष्ठों को व्यवस्थित कर सकता है, हालांकि यह अच्छी तरह से पसंद करता है। केवल कुछ ही सा क्षेत्र को 1 पर सेट होने के साथ

+0

तो ऐसा लगता है जैसे मेरे पास केवल कुछ पंक्तियां हैं जहां बिट फ़ील्ड 1 है (उदाहरण के लिए "IsProcessed" का ट्रैक रखना), तो एक सूचकांक अच्छा होगा क्योंकि यह उन्हें मूल्य के अनुसार आदेश देगा और फिर चयन करने में सक्षम होगा छोटे कामकाजी सेट बहुत जल्दी। यदि आप सहमत हैं, तो इसे जोड़ें और मैं इसे स्वीकार करूंगा। – jeremcc

+2

मैं अपने पिछली टिप्पणी में क्या मतलब है इस बयान कि: "जब आप सूचकांक थोड़ा क्षेत्र (या कुछ संकीर्ण रेंज), आप केवल कम करने छमाही में कार्यरत सेट" सच नहीं है, तो वितरण भारी की ओर भारित है एक मूल्य लेकिन मुझे आपका बाकी जवाब पसंद है, इसलिए यदि आप इसे ठीक करते हैं, तो मैं इसे स्वीकार करूंगा। – jeremcc

+1

हो गया। मैं सोच रहा था कि दस लाख पंक्तियों के लिए, थोड़ा सा क्षेत्र 50% वितरण होगा, लेकिन आप सही हैं कि एक विशेष समस्या स्थान के लिए यह कामकाजी सेट को बहुत कम कर सकता है। –

0

माप प्रतिक्रिया समय पहले और बाद में और देखें कि यह सार्थक है या नहीं; सैद्धांतिक रूप से इसे अनुक्रमित फ़ील्ड का उपयोग करके प्रश्नों के प्रदर्शन में सुधार करना चाहिए, लेकिन यह सचमुच सत्य/झूठे मूल्यों और उन प्रश्नों में शामिल अन्य क्षेत्रों के वितरण पर निर्भर करता है जिनके बारे में आप चिंतित हैं

0

क्या यह एक आम प्रश्न है? रिकॉर्ड्स के "मुट्ठी भर" की तलाश करते समय यह लायक हो सकता है लेकिन अन्य पंक्तियों पर आपको बहुत मदद नहीं करेगा। क्या डेटा की पहचान करने के अन्य तरीके हैं?

1

आप अगर एक सूचकांक प्रभाव आप इच्छा है जानना चाहते हैं: परीक्षण और परीक्षण फिर से।

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

2

बेशक यह worths, खासकर यदि आप उस मान से डेटा पुनः प्राप्त करने की जरूरत है। यह एक सामान्य मैट्रिक्स का उपयोग करने के बजाय एक स्पैर मैट्रिक्स का उपयोग करने के समान होगा।

अब एसक्यूएल 2008 के साथ आप विभाजन कार्यों का उपयोग कर सकते हैं, और आप डेटा है कि एक सूचकांक में चला जाता है फिल्टर करने के लिए सक्षम हैं। पिछले संस्करणों के लिए नुकसान यह होगा कि सूचकांक सभी डेटा के लिए बनाया जाएगा, लेकिन इसे एक अलग फ़ाइल समूह में दिलचस्प मानों को संग्रहीत करके अनुकूलित किया जा सकता है।

2

जैसा कि अन्य ने कहा है, आप इसे मापना चाहेंगे। मुझे याद नहीं है कि मैंने इसे कहाँ पढ़ा है, लेकिन सूचकांक प्रभावी होने के लिए एक कॉलम को बहुत अधिक कार्डिनालिटी (लगभग 95%) होना चाहिए। इसके लिए आपका सबसे अच्छा परीक्षण सूचकांक बनाना और बीआईटी क्षेत्र के 0 और 1 मानों के लिए निष्पादन योजनाओं की जांच करना होगा। यदि आप निष्पादन योजना में एक इंडेक्स तलाश ऑपरेशन देखते हैं तो आप जानते हैं कि आपकी अनुक्रमणिका का उपयोग किया जाएगा।

कार्रवाई का आपका सबसे अच्छा तरीका तालिका से मूल चयन * परीक्षण के साथ परीक्षण करना होगा जहां BitField = 1; क्वेरी और धीरे-धीरे चरण-दर-चरण तक कार्यक्षमता का निर्माण करें जब तक कि आपके आवेदन के लिए यथार्थवादी क्वेरी न हो, निष्पादन योजना की जांच करने के लिए प्रत्येक चरण के साथ जांच करें कि इंडेक्स की तलाश अभी भी उपयोग की जा रही है। माना जाता है कि इस निष्पादन योजना का उत्पादन में कोई गारंटी नहीं है, लेकिन यह एक अच्छा मौका होगा कि यह होगा।

कुछ जानकारी sql-server-performance.com forums पर और में article

+0

यह कॉलम की इतनी ज्यादा नहीं है कि पूरी तरह मायने रखती है। यह WHERE खंड की चुनिंदाता है। तो यदि मूल्य 1 के साथ कुछ कॉलम हैं, तो यह अभी भी सूचकांक के लिए अच्छा हो सकता है। यदि यह 50/50 (उदा। नर/मादा) है तो यह इतना लायक नहीं है। –

6

संदर्भित मुझे नहीं लगता कि जब मैं अपने आप में सूचकांक महज एक सा स्तंभ होता है, यह एक यौगिक के हिस्से के रूप बिट कॉलम शामिल करना बहुत आम है पाया जा सकता है सूचकांक।

एक साधारण उदाहरण सक्रिय पर एक सूचकांक के बजाय LASTNAME सिर्फ lastname, जब आपके आवेदन लगभग हमेशा सक्रिय ग्राहकों की तलाश में है किया जाएगा।

+5

आपके द्वारा दिए गए उदाहरण में, मैं पहले LastName डालने के इच्छुक हूं। यह विशिष्ट क्वेरी वर्कलोड पर निर्भर करता है, लेकिन आम तौर पर पहले अधिक चुनिंदा कॉलम होने का मतलब है कि इंडेक्स का उपयोग होने की अधिक संभावना है। –

2

क्योंकि एसक्यूएल सर्वर लगभग हमेशा अपने और अधिक कुशल बस करने के लिए मिल जाएगा

कि "मैं एक बात यह है कि कम प्रमुखता (विशिष्ट मान की कम संख्या) के साथ एक क्षेत्र का अनुक्रमण वास्तव में कर रही लायक नहीं है पर पढ़ने याद है" सूचकांक पढ़ने के बजाय एक टेबल स्कैन। तो मूल रूप से आपकी अनुक्रमणिका कभी भी उपयोग नहीं की जाएगी और इसे बनाए रखने के लिए यह एक अपशिष्ट है। जैसा कि अन्य ने कहा है कि यह एक यौगिक सूचकांक में ठीक हो सकता है।

0

प्रमुखता, एक कारक है अन्य कितनी अच्छी तरह सूचकांक अपने डेटा को विभाजित करता है। यदि आपके पास आधे 1 और आधे 0 हैं, तो इससे मदद मिलेगी। (यह मानते हुए कि कि सूचकांक कुछ अन्य सूचकांक से चयन करने के लिए एक बेहतर रास्ता है)। हालांकि, आप कितनी बार डालने और अपडेट कर रहे हैं? चयन प्रदर्शन के लिए अनुक्रमित जोड़ने से भी सम्मिलित करें, अद्यतन चोट और प्रदर्शन हटाएँ, तो रखें कि मन में।

मैं, कह सकते हैं कि अगर 0s (या इसके विपरीत) 1s 75 से बेहतर नहीं% से 25% है, परेशान नहीं है।

+0

मैं असहमत हूं। यदि आपका वितरण 50/50 है, तो आप कभी भी इंडेक्स का उपयोग नहीं करेंगे, क्योंकि यह टेबल स्कैन करने के लिए तेज़ी से होगा। हालांकि, अगर आप केवल 5, 1 मूल्यों, और 1 लाख 0 मान हैं, यह बहुत इंडेक्स का उपयोग होने की संभावना होगी जब के लिए 1. FYI करें – Kibbee

1

आप नहीं कर सकते हैं सूचकांक एसक्यूएल सर्वर 2000 में एक सा क्षेत्र, के रूप में समय में पुस्तकें ऑनलाइन में संकेत दिया गया था:

बिट

पूर्णांक डेटा प्रकार 1, 0, या नल।

टिप्पणियां के प्रकार बिट

कॉलम उन पर अनुक्रमित नहीं कर सकते हैं।

हाँ, यदि आप पंक्तियों की केवल एक मुट्ठी भर है, लाखों लोगों के बाहर, एक सूचकांक में मदद मिलेगी। लेकिन आप स्तंभ एक tinyint बनाने की जरूरत है अगर आप इस मामले में यह करना चाहते हैं।

नोट: एंटरप्राइज़ प्रबंधक आप थोड़ा स्तंभ पर एक सूचकांक बनाने नहीं दूँगा। आप आप फिर भी मैन्युअल सा स्तंभ पर एक सूचकांक बना सकते हैं चाहते हैं:

CREATE INDEX IX_Users_IsActiveUsername ON Users 
(
    IsActive, 
    Username 
) 

लेकिन SQL Server 2000 वास्तव में ऐसा सूचकांक का उपयोग नहीं होगा - एक प्रश्न जहां सूचकांक एक आदर्श उम्मीदवार होगा, जैसे चल रहा है:

SELECT TOP 1 Username 
FROM Users 
WHERE IsActive = 0 

एसक्यूएल सर्वर 2000 इसके बजाय एक टेबल स्कैन करेगा, जैसा कि इंडेक्स भी मौजूद नहीं है। यदि आप कॉलम को एक छोटे से SQL Server 2000 में बदलते हैं तो एक इंडेक्स खोज करेगा। इसके अलावा, निम्नलिखित गैर कवर क्वेरी:

SELECT TOP 1 * 
FROM Users 
WHERE IsActive = 0 

यह एक सूचकांक की तलाश, किसी बुकमार्क देखने के बाद प्रदर्शन करेंगे।


SQL सर्वर 2005 में बिट कॉलम पर अनुक्रमणिका के लिए सीमित समर्थन है।उदाहरण के लिए:

SELECT TOP 1 Username 
FROM Users 
WHERE IsActive = 0 

इंडेक्स कवरेज इंडेक्स के माध्यम से खोज करेगा। लेकिन गैर कवर मामला:

SELECT TOP 1 * 
FROM Users 
WHERE IsActive = 0 

एक सूचकांक का कारण नहीं बनेगा एक बुकमार्क देखने के बाद चाहते हैं, यह एक मेज स्कैन (या क्लस्टर सूचकांक स्कैन) प्रदर्शन करेंगे, बल्कि सूचकांक प्रदर्शन की तुलना में एक बुकमार्क देखने के बाद की तलाश ।

प्रयोग और प्रत्यक्ष अवलोकन द्वारा सत्यापित।

+0

खोज - SQL सर्वर 2005 प्रबंधन स्टूडियो आप इसे करते हैं करता है। – jeremcc

+0

SQL Server 2000 की मेरी प्रति मुझे थोड़ा कॉलम पर एक अनुक्रमणिका सेट करने दें। – Kibbee

+0

SQL Server 2000 की मेरी प्रति मुझे थोड़ा कॉलम पर एक अनुक्रमणिका सेट करने की अनुमति नहीं देती है। –

1

अपने स्वयं पर, कोई इस पर बहुत कम चयनात्मकता में जो परिणाम के रूप में। एक यौगिक सूचकांक के हिस्से के रूप में। काफी संभवतः लेकिन अन्य समानता कॉलम के बाद ही।

9

100-मिलियन रिकॉर्ड? हां, मुझे लगता है कि बिट फ़ील्ड को अनुक्रमणित करना निश्चित रूप से बिट = 1 रिकॉर्ड पूछताछ करेगा। आपको इंडेक्स से लॉगरिदमिक सर्च टाइम प्राप्त करना चाहिए और फिर बिट = 1 रिकॉर्ड्स के साथ केवल कुछ पेजों को स्पर्श करना चाहिए। अन्यथा, आपको 100 मिलियन रिकॉर्ड टेबल के सभी पृष्ठों को छूना होगा।

फिर फिर, मैं निश्चित रूप से डेटाबेस विशेषज्ञ नहीं हूं और कुछ महत्वपूर्ण याद आ रहा है।

2

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

http://www.microsoft.com/technet/prodtechnol/sql/2005/impprfiv.mspx

यह सब मान लिया गया है कि आप Microsoft SQL सर्वर 2005 उद्यम कर रहे हैं। 2008 में भी ऐसा ही लागू हो सकता है, मैं उस संस्करण से परिचित नहीं हूं।

+0

यह अच्छा होगा अगर किसी ने इसका परीक्षण किया ... –

6

यदि आपने इसे पढ़ा नहीं है, तो जेसन मैसी ने हाल ही में एक लेख लिखा था जिसने इस विषय पर चर्चा की थी।

http://statisticsio.com/Home/tabid/36/articleType/ArticleView/articleId/302/Never-Index-a-BIT.aspx

संपादित करें: नई लेख स्थान - http://sqlserverpedia.com/blog/sql-server-bloggers/never-index-a-bit

वेबैक मशीन पहले से "नया" लेख स्थान के लिए: http://web.archive.org/web/20120201122503/http://sqlserverpedia.com/blog/sql-server-bloggers/never-index-a-bit/

नया एसक्यूएल सर्वर Pedia स्थान Toadworld है, जो एक नया लेख है केनेथ फिशर से इस विषय पर चर्चा:

http://www.toadworld.com/platforms/sql-server/b/weblog/archive/2014/02/17/dba-myths-an-index-on-a-bit-column-will-never-be-used.aspx

+0

यह आलेख अब दिखाई नहीं दे रहा है – Homer6

+0

@ होमर 6 मैंने इस आलेख के लिए नए घर की तरह एक लिंक जोड़ा है। – Jeff

+0

उत्कृष्ट ... thx :-) – Homer6

0

इयान बॉयड सही है जब वह कहता है कि आप एसक्यूएल 2000 के लिए एंटरप्राइज़ मैनेजर के माध्यम से ऐसा नहीं कर सकते (टी-एसक्यूएल के माध्यम से इसे बनाने के बारे में उसका नोट देखें।

1

बहुत देर से इस सवाल का जवाब ...

हाँ, यह useful according to SQL CAT team हो सकता है (अद्यतन, समेकित किया गया है)

+1

लिंक अब मृत प्रतीत होता है। हालांकि, यह पोस्ट एक [ई-बुक] (http://download.microsoft.com/download/0/F/B/0FBFAA46-2BFD-478F-8E56-7BF3C672DF9D/SQLCAT के कई अन्य लोगों के साथ समेकित समझा गया प्रतीत होता है % 20Guide% 20to% 20Relational% 20Engine.pdf)। संदर्भित अनुभाग पृष्ठ 86 पर शुरू होता है। ई-पुस्तक [SQLCAT.com eBooks] से डाउनलोड की जा सकती है (http://blogs.msdn.com/b/sqlcat/archive/2013/10/23/sqlcat-com-ebook -downloads.aspx) लिंक के तहत "एसक्यूएलसीएटी गाइड टू रिलेशनल इंजन"। – mwolfe02

13

मैं सिर्फ एक और के माध्यम से यह सवाल बारे में जाना। यह मानते हुए कि आपका बयान है कि रिकॉर्ड्स का केवल कुछ मुट्ठी 1 मान (और वे वही हैं जिन्हें आप रुचि रखते हैं) मानते हैं, फिर फ़िल्टर किए गए इंडेक्स एक अच्छा विकल्प हो सकता है। की तरह कुछ:

create index [IX_foobar] on dbo.Foobar (FooID) where yourBitColumn = 1 

यह एक काफी छोटे सूचकांक पैदा करेगा कि अनुकूलक बहुत चालाक उपयोग करने के लिए है, जब आपकी क्वेरी में एक विधेय है।

+0

यह ध्यान देने योग्य है कि क्वेरी में अनुमान फ़िल्टर किए गए इंडेक्स में मूल्य को हार्ड-कोड किया जाना चाहिए। यदि आप पैरामीटर 'yourBitColumn = @ value' में मान पास करते हैं, तो ऑप्टिमाइज़र यह निर्धारित नहीं कर सकता कि फ़िल्टर किए गए इंडेक्स उपयोग योग्य है या नहीं। – geofftnz

+1

इसके आसपास के तरीके हैं, लेकिन आप सही हैं; ऑप्टिमाइज़र को संकलन समय पर गारंटी की आवश्यकता होती है कि फ़िल्टर किए गए इंडेक्स की भविष्यवाणी से मेल खाने वाले किसी भी पूर्वानुमान के मान स्थिर/परिवर्तनीय हैं क्योंकि यह एक सामान्य योजना बनाने के लिए अनुकूलक का काम है जो * किसी भी * पैरामीटर के सेट के लिए काम करेगा। –

2

यदि आपका वितरण बहुत ज्ञात और असंतुलित है, तो 99% पंक्तियां बिट = 1 हैं और 1% बिट = 0 हैं, जब आप बिट = 1 के साथ WHERE क्लॉज करते हैं, तो एक पूर्ण टेबल स्कैन आसपास होगा इंडेक्स स्कैन के रूप में एक ही समय। यदि आप एक तेज क्वेरी चाहते हैं जहां बिट = 0 है, तो मुझे पता है कि सबसे अच्छा तरीका एक फ़िल्टर किए गए इंडेक्स को बना रहा है, एक खंड जोड़कर जहां थोड़ा = 0. इस तरह, वह अनुक्रमणिका केवल 1% पंक्ति संग्रहित करेगी। फिर एक WHERE बिट = 0 करने से बस क्वेरी ऑप्टिमाइज़र उस इंडेक्स को चुनने देगा, और इससे सभी पंक्तियां थोड़ा = 0. होंगी। आपके पास भी बहुत कम डिस्क स्पेस होने की आवश्यकता है जो बिट पर पूर्ण इंडेक्स की तुलना करें ।

0

आप यहाँ स्मार्ट क्वेरी करने के लिए होने की जरूरत है, तो आप अपने स्तंभ पर लोड मूल्य जानते हैं कि सच का भार आपके सिस्टम में अधिक है और आप सभी सही मूल्य झूठी नहीं की जाँच करने के लिए आपकी क्वेरी रिट जाँच करना चाहते हैं चाहिए .. यह बहुत मदद करेगा, यह सिर्फ चाल है।

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