2012-11-02 20 views
10

में अद्वितीय बाधाओं को लेखन प्रदर्शन को कैसे प्रभावित करता है क्या UNIQUE कॉलम या स्तंभों के समूह पर निर्दिष्ट बाधा पोस्टग्रेस डीबी के किसी भी तरीके से लिखने के प्रदर्शन को प्रभावित करती है? यह आंतरिक रूप से कैसे काम करता है?पोस्टग्रेस डीबी

मेरा मतलब है, क्या यह एक नए रिकॉर्ड को सम्मिलित करने के समय अद्वितीय जांच करता है? यदि हां, तो यह कैसे करता है, क्या यह डीबी में पहले से मौजूद डुप्लिकेट मान के लिए रैखिक खोज करता है? उस स्थिति में, यह प्रदर्शन को प्रभावित करने के लिए समझा जाता है यानी अद्वितीय बाधाओं की संख्या और अधिक लिखना/सम्मिलित प्रदर्शन होगा? क्या यह सच है?

उत्तर

20

UNIQUE बाधा या PRIMARY KEY का निर्माण UNIQUE btree अनुक्रमणिका के निर्माण में परिणाम। जब भी कोई रिकॉर्ड INSERT एड, UPDATE एड, या DELETE डी किसी भी अनुक्रमित कॉलम को बदला जाता है तो यह अनुक्रमणिका अद्यतन होनी चाहिए। यदि कोई अनुक्रमित कॉलम नहीं बदला जाता है तो हॉट (हीप-केवल टुपल ऑप्टिमाइज़ेशन) इंडेक्स अपडेट में ला सकता है और इससे बच सकता है, खासकर यदि आपके पास पृष्ठों में स्थान बनाने के लिए गैर-डिफ़ॉल्ट FILLFACTOR है।

डालने/अपडेट पर इंडेक्स अपडेट समय लगता है, इसलिए UNIQUE अनुक्रमित तालिका में डालने से किसी भी अद्वितीय इंडेक्स या प्राथमिक कुंजी के बिना किसी को डालने से धीमा होता है। UPDATE के लिए भी यह सच है, लेकिन यदि इंडेक्स को टुपल को अपडेट करने के लिए उपयोग किया जाता है (और एक सेक्स्कैन से बचें) तो यह आम तौर पर इंडेक्स नहीं होने पर नेट जीत होती है। यदि टुपल को खोजने के लिए एक अलग इंडेक्स का उपयोग किया जाता है, या यदि एक सेक्स्कैन तेज है (जैसा कि छोटे टेबल पर सत्य है) तो INSERT की तरह इंडेक्स का कोई लाभ नहीं है और केवल उस ऑपरेशन के लिए इसे अपडेट करने के लिए लिखने की लागत लगती है। यह सभी इंडेक्स के लिए सच है, न केवल UNIQUE इंडेक्स।

प्रत्येक INSERT या एक UNIQUE अनुक्रमित स्तंभ पर UPDATE सत्यापित करने के लिए कुंजी एक मौजूदा कुंजी से विरोध नहीं करता एक सूचकांक देखने की आवश्यकता है। अस्पष्ट स्मृति से यह सूचकांक में नई प्रविष्टि डालने की प्रक्रिया के साथ संयुक्त है, लेकिन मैं वहां 100% निश्चित नहीं हूं।

AFAIK DELETE सूचकांक को प्रभावित नहीं करता है। यह ढेर में टुपल के लिए बस xmax सेट करता है।

सूचकांक अपडेट हो जाता है भले ही ROLLBACK सफल प्रविष्टि या UNIQUE अवरोधित कॉलम पर अपडेट के बाद किसी त्रुटि के साथ लेनदेन या लेन-देन बंद हो। VACUUM ऑटोवाक्यूम द्वारा काम बाद में मृत सूचकांक प्रविष्टियों को साफ करता है। Concurrency Control in the PostgreSQL manual देखें।

यह सब PRIMARY KEY का भी सच है, जिसे UNIQUE अनुक्रमणिका का उपयोग करके भी लागू किया गया है।

PRIMARY KEY और UNIQUE बाधाओं द्वारा उपयोग किए गए इंडेक्स समेत प्रत्येक अनुक्रमणिका, लेखन प्रदर्शन पर जुर्माना लगाती है।

+0

उत्तर के लिए धन्यवाद। यह बहुत अच्छी तरह से समझाया गया था। क्या प्राथमिक कुंजी रिकॉर्ड के सॉर्टिंग ऑर्डर को भी प्रभावित करती है? यह बहुत अच्छा होगा अगर आप मेरे अन्य प्रश्न का उत्तर यहां दे सकते हैं: http://stackoverflow.com/questions/13190720/what-is-the-order-of-records-when-the-primary-key-is- निर्दिष्ट-ऑन-ए-समूह के-col –