INDEX?

2009-07-30 4 views
8

इंडेक्स-अभिव्यक्ति क्या करती है? अंत में एक उदाहरण:INDEX?

CREATE TABLE tags (
    tag_id      varchar(255) NOT NULL, 
    "{Users}{userID}question_id" int4 NOT NULL, 
    tag       varchar(20), 
    CONSTRAINT tag 
    PRIMARY KEY (tag_id)); 
CREATE INDEX tags_tag 
    ON tags (tag); 
+5

आपके साथ क्या गलत है जो इस तरह के प्रश्नों को कम करते हैं? यह एक पूरी तरह से वैध सवाल है, और वास्तव में वहां बहुत से लोग हैं जो * सोचते हैं कि वे डेटाबेस के बारे में सभी जानते हैं और यह समझा नहीं सकते कि इंडेक्स कैसे काम करता है। –

उत्तर

10

एक index एक डेटाबेस संरचना है कि डेटाबेस, जब क्षेत्र (रों) सूचकांक में के आधार पर खोज करने के अलग-अलग पंक्तियों को गति पहुँच मदद कर सकते है।

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

इंडेक्स का भी नुकसान है: प्रत्येक इंडेक्स के लिए, उस तालिका के लिए गति लिखें। यदि आप कोई पंक्ति डालते हैं, तो इंडेक्स होने का मतलब है कि डेटाबेस लेखन के अलावा पंक्ति में ही, इसे इंडेक्स को भी अपडेट करना होगा।

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

आपकी प्राथमिक कुंजी कॉलम लगभग हमेशा डेटाबेस द्वारा जेनरेट की गई अनुक्रमणिका होगी। और यदि आप किसी विशेष कॉलम के मानों को अद्वितीय रखना चाहते हैं, तो इसे लागू करने के लिए UNIQUE INDEX बनाया जा सकता है।

This SO प्रश्न डेटाबेस इंडेक्स के लिए अंगूठे के नियमों के बारे में पूछता है, जो उपयोगी हो सकता है।

+0

क्या आपको कुछ प्रकार के थंबब्रल्स हैं जब आपको इंडेक्स होना चाहिए? उदाहरण के लिए मैंने सहज रूप से इंडेक्स को चुना है क्योंकि एसओ-स्टाइल टैग में शायद पहुंच की गति बाधा है। –

+0

क्या यह एक सूचकांक है? मैं md5deep (question_id, user_id, time) को सहेजता हूं-प्रत्येक मान को अलग से पूछताछ के बजाय तालिका में प्राथमिक कुंजी के रूप में दिखाता है? –

+0

यह व्यापार के लिए पहुंच का समय बढ़ाता है: लेखन समय में वृद्धि हुई। –

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