2015-02-25 7 views
5

मान लीजिए मेरे पास एक सारणी है जो "कार्य कतार" (लाखों रिकॉर्ड के दसियों) का प्रतिनिधित्व करती है।रिकॉर्डिंग अन्य तालिका बनाम "ध्वज" कॉलम एसक्यूएल प्रदर्शन

कार्य "कतारबद्ध" या "पूर्ण" हो सकते हैं।

यदि हम प्रक्रिया के लिए 10 कार्य को पकड़ना चाहते हैं तो बेहतर प्रदर्शन करता है?

    ENUM/ BIT/ TINYINT काम पर चिह्नित करने के रूप में किया है या नहीं (अंततः स्तंभ पर इंडेक्स)
  • पंक्तिबद्ध कार्यों के लिए अलग-अलग टेबल, और कार्य पूरा हो और से पूरे किए गए प्रत्येक कार्य हटाने जैसे "झंडा" कॉलम के साथ
  • एकल मेज

ध्यान दें कि शुरुआत में, हमारे पास कुछ या कोई भी पूरा कार्य नहीं है, लेकिन प्रसंस्करण के रूप में, पहले से ही किए गए कार्यों के लाखों लोग होंगे।

+0

आप डीबीएमएस निर्दिष्ट कर सकते हैं। – jarlh

+0

@jarlh यह वर्तमान में MySQL aboyt है, लेकिन ओरेकल संदर्भ में भी पूछ रहा है, इसलिए निर्दिष्ट नहीं है। –

उत्तर

5

शायद इससे कोई फर्क नहीं पड़ता, लेकिन अगर यह मैं था, तो मैं एक टेबल का उपयोग करता। यहां मेरा तर्क है:

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

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

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

एक अंतिम तर्क - यदि आप इसे एक बड़ी तालिका में डालते हैं, तो इन कार्यों के प्रबंधन का आगे प्रदर्शन ट्विकिंग एक सॉफ्टवेयर विकास समस्या के विपरीत एक डीबीएमएस कॉन्फ़िगरेशन समस्या बन जाता है। यह मेरी किताब में एक बड़ी जीत है। पागल कॉन्फ़िगरेशन सामग्री के सभी प्रकार हैं जो आप किसी भी डीबीएमएस में प्रदर्शन को बेहतर बनाने के लिए कर सकते हैं, जिसमें लंबवत और क्षैतिज विभाजन जैसी चीजें शामिल हैं। यदि आपके डेटा को वितरित करने के तरीके से कुछ चीजें आपके सॉफ्टवेयर में एम्बेड की गई हैं, तो वे चीज़ें विकल्प नहीं होंगी।

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

+0

इसके अलावा, मैंने "कतारबद्ध/समाप्त" स्थितियों के साथ कुछ 2 एमएलएन वॉल्यूम परीक्षण किया है, और 100 कार्यों का चयन करना इंडेक्स के साथ वास्तव में तेज़ है, ** स्थितिओं से विभाजित होने से भी तेज़ ** ** –

+0

आरडीबीएमएस सॉफ़्टवेयर के साथ काम करने के बाद मैंने सीखा कई सालों तक - यदि आरडीबीएमएस सॉफ्टवेयर कुछ करने के लिए एक सुविधा प्रदान करता है, तो आम तौर पर आपको इसका इस्तेमाल करना चाहिए और अपना खुद का रोल नहीं करना चाहिए।गंभीरता से, वे 60 के दशक से इन चीजों पर शोध और क्वेरी अनुकूलन कर रहे हैं, और जब तक कि आपकी आवश्यकताएं बेहद अजीब या कस्टम न हों, यह केवल गायब होने की संभावना नहीं है कि आप प्रदर्शन के मामले में बेहतर प्रदर्शन करेंगे। सबसे अच्छा आप उम्मीद कर सकते हैं कि उन्होंने जो किया है उसे पुन: कार्यान्वित करना है, और प्रदर्शन के अनुसार ** समान ** परिणाम प्राप्त करें, बेहतर नहीं। – FrobberOfBits

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