क्या डेटा लोड होने के बाद एक इंडेक्स बनाने के लिए और अधिक कुशल है या इससे कोई फर्क नहीं पड़ता?पोस्टग्रेज़ में एक इंडेक्स बनाने का सबसे प्रभावी तरीका
उदाहरण के लिए, मेरे पास पोस्टग्रेस 8.4 डीबी में लोड करने के लिए 500 फाइलें हैं। यहां दो इंडेक्स निर्माण परिदृश्य हैं जिनका उपयोग मैं कर सकता हूं:
- तालिका बनाते समय अनुक्रमणिका बनाएं, फिर प्रत्येक फ़ाइल को तालिका में लोड करें; या
- तालिका में सभी फ़ाइलों को लोड करने के बाद अनुक्रमणिका बनाएं।
तालिका डेटा स्वयं लगभग 45 गीगाबाइट है। सूचकांक लगभग 12 गीगाबाइट है। मैं एक मानक सूचकांक का उपयोग कर रहा हूँ। यह इस तरह बनाया गया है:
CREATE INDEX idx_name ON table_name (column_name);
मेरा डेटा लोडिंग COPY FROM का उपयोग करता है।
एक बार सभी फाइलें लोड हो जाने के बाद, तालिका पर कोई अपडेट, डिलीट या अतिरिक्त भार नहीं होगा (यह एक दिन का डेटा है जो बदलेगा नहीं)। तो मैं पूछना चाहता था कि कौन सा परिदृश्य सबसे कुशल होगा? प्रारंभिक परीक्षण इंगित करता है कि सभी फाइलें लोड करना और फिर इंडेक्स (परिदृश्य 2) बनाना तेजी से है, लेकिन मैंने दो दृष्टिकोणों की वैज्ञानिक तुलना नहीं की है।
ठीक है, जब टेबल लॉक हो जाती है कोई भी पढ़ या लिख सकता है, जो रात में भी बहुत परेशान हो सकता है। CREATE INDEX CONCURRENTLY – mvp
@BradTilley का उपयोग करके आप बेहतर हैं: मैंने सोचा कि यह नई सुविधा थी, लेकिन PostgreSQL 8.4 [इसका समर्थन करता है] (http://www.postgresql.org/docs/8.4/static/sql-createindex.html)। – mvp
"* जब टेबल लॉक हो जाता है कोई भी पढ़ या लिख सकता है *" - मुझे नहीं लगता कि यह सच है। जब 'CREATE INDEX' चल रहा है, तब भी तालिका पढ़ी जा सकती है, लेकिन अगर मैं गलत नहीं हूं तो अपडेट नहीं किया गया है। –