बहुत ज्यादा सब प्रति-पंक्ति कार्यों का प्रदर्शन पर प्रभाव पड़ेगा, एकमात्र वास्तविक प्रश्न यह है:"क्या प्रभाव इतना छोटा है कि चिंता न करें?"।
यह कुछ ऐसा है जिसे आपको अनुमान लगाने के बजाय मापने के द्वारा खोजना चाहिए। डेटाबेस प्रशासन केवल एक सेट-एंड-भूल गतिविधि है यदि न तो आपका डेटा और न ही आपके प्रश्न कभी बदलते हैं। अन्यथा, आपको यह सुनिश्चित करने के लिए समय-समय पर प्रदर्शन की निगरानी करनी चाहिए कि कोई समस्या न हो।
उपरोक्त टिप्पणियों में "काफी छोटा" से मेरा मतलब है, आपको शायद कुछ इस तरह के प्रदर्शन प्रभाव के बारे में चिंता करने की ज़रूरत नहीं है:
select * from friends where lowercase(lastname) = "smith"
अगर आपके केवल तीन दोस्त हैं।
जैसे-जैसे टेबल का आकार बढ़ता जाता है, इन बातों का असर और भी गंभीर होता जाता है। उदाहरण के लिए, यदि आपके पास एक सौ मिलियन ग्राहक हैं और आप उन सभी को ढूंढना चाहते हैं जो कंप्यूटर से संबंधित हो सकते हैं, तो आप कोशिश नहीं करना चाहेंगे:
select name from customers where lowercase(name) like '%comp%'
यह एक टन ईंटों की तरह आपके डीबीए को नीचे लाने की संभावना है।
अतीत में हमने इसे ठीक करने का एक तरीका डेटा में अतिरेक का परिचय देना है। उस पहले उदाहरण का उपयोग करते हुए, हम lowerlastname
. नामक एक अतिरिक्त कॉलम जोड़ेंगे और इसे lastname
. के लोअरकेस मान से भर दें . फिर इसे खोज उद्देश्यों के लिए अनुक्रमित करें और अपने select
बयान अंधाधुंध तेज हो जाते हैं, जैसा उन्हें होना चाहिए।
और यह हमारे बहुत प्रिय 3NF को क्या करता है, मैंने सुना है आप पूछते हैं? उत्तर "ज्यादा नहीं" है, यदि आप जानते हैं कि आप क्या कर रहे हैं :-)
आप डेटाबेस सेट कर सकते हैं ताकि डेटा स्थिरता बनाए रखने के लिए यह नया कॉलम एक सम्मिलित/अद्यतन ट्रिगर द्वारा पॉप्युलेट हो। प्रदर्शन कारणों से 3NF को तोड़ना पूरी तरह से स्वीकार्य है, बशर्ते आप परिणामों को समझें और कम करें।
इसी तरह, उस दूसरी क्वेरी में एक इंसर्ट/अपडेट ट्रिगर हो सकता है जो एक नया अनुक्रमित कॉलम name_contains_comp
पॉप्युलेट करता है जब भी कोई प्रविष्टि अद्यतन या सम्मिलित की गई थी जिसमें प्रासंगिक पाठ था।
चूंकि अधिकांश डेटाबेस लिखे जाने की तुलना में कहीं अधिक बार पढ़े जाते हैं, यह गणना की लागत को सम्मिलित/अद्यतन पर ले जाता है, इसे सभी चुनिंदा परिचालनों में प्रभावी रूप से परिशोधन करता है। तब यह प्रश्न होगा:
select name from customers where name_contains_comp = 'Y'
फिर से, आप थोड़े धीमे इंसर्ट और अपडेट की मामूली कीमत पर क्वेरी को अंधाधुंध तेज़ पाएंगे।