मेरे पास लगभग 5 मिलियन पंक्तियों वाली एक तालिका है जिसमें एक एफके बाधा है जो किसी अन्य तालिका (लगभग 5 मिलियन पंक्तियों) की प्राथमिक कुंजी का संदर्भ देती है।PostgreSQL - बाधाओं को अक्षम करना
मुझे दोनों टेबलों से लगभग 75000 पंक्तियों को हटाने की आवश्यकता है। मुझे पता है कि अगर मैं इसे एफके बाधा के साथ करने की कोशिश करता हूं तो यह एक अस्वीकार्य समय लेने जा रहा है।
ओरेकल पृष्ठभूमि से आ रहा है मेरा पहला विचार बाधा को अक्षम करना था, & हटाएं तो बाधा को पुनः प्राप्त करें। यदि मैं एक सुपर उपयोगकर्ता हूं (मैं नहीं हूं, लेकिन मैं उस उपयोगकर्ता के रूप में लॉग इन कर रहा हूं जो ऑब्जेक्ट्स का स्वामित्व/निर्माण करता है) में पोस्टग्रेस मुझे बाधा ट्रिगर्स को अक्षम करने देता है, लेकिन ऐसा लगता है कि मैं काफी कुछ नहीं चाहता हूं।
दूसरा विकल्प बाधा को छोड़ना और फिर इसे बहाल करना है। मुझे चिंता है कि बाधाओं का पुनर्निर्माण करने से मेरी टेबल के आकार को उम्र बढ़ने जा रहा है।
कोई विचार?
संपादित करें: बिली के प्रोत्साहन के बाद मैंने किसी भी बाधा को बदले बिना हटाए जाने की कोशिश की है और इसमें 10 मिनट से ज्यादा समय लगता है। हालांकि, मैंने पाया है कि जिस तालिका से मैं हटाने की कोशिश कर रहा हूं वह एक स्व-रेफरेंशियल विदेशी कुंजी है ... डुप्लिकेट (& गैर अनुक्रमित)।
अंतिम अपडेट - मैंने स्वयं रेफरेंसियल विदेशी कुंजी गिरा दी, मेरी हटा दी और इसे वापस जोड़ा। बिली का सही दौर लेकिन दुर्भाग्य से मैं जवाब के रूप में अपनी टिप्पणी स्वीकार नहीं कर सकता!
तो यह और भी 5 लाख पंक्तियों के साथ, कि समय लग रहा है, तो आप कुछ सेटअप गलत है। –
क्या? हटाएं या बाधा को पुनः सक्षम करना? और हां, यह काफी संभव है कि कुछ गलत तरीके से स्थापित किया गया हो या अनुकूलित तरीके से कम में - डेटाबेस को हाइबरनेट द्वारा 'निर्मित' किया गया है (मुझे इसके साथ कुछ लेना देना नहीं था)। – azp74
हटाएं। अनुक्रमित तालिकाओं से एफके चेक रैखिक समय लेता है, और 75000 + 75000 पंक्तियों = 150 000 पंक्तियों को हटा देता है। एफके चेक (बाइनरी सर्च, एलजी (5 मिलियन) == 1 9) प्रति तुलना में सबसे खराब मामले पर विचार करें, और शायद प्रति पंक्ति तुलना की 20 मशीन तुलना, 57 000 000 तुलना के बराबर है। एक औसत तुलना में एक अरब तुलना करने में सक्षम होने वाली औसत मशीन का एक रूढ़िवादी अनुमान ध्यान में रखते हुए, यह अभी भी CPU समय के एक सेकंड से कम लेना चाहिए। डिस्क से लोड करना भी एक बड़ा मुद्दा नहीं होना चाहिए क्योंकि तालिका में 5 मिलियन पंक्तियों पर भी तालिका में फिट होना चाहिए। –