मैंने हाल ही में बहुत सुना है कि एसक्यूएल एक भयानक भाषा है, और ऐसा लगता है कि सूरज के नीचे हर रूपरेखा एक डेटाबेस अमूर्त परत के साथ पूर्व-पैक की जाती है।
ध्यान दें कि ये परतें सिर्फ अपने सामान को रूपांतरित करती हैं SQL
। अधिकांश डेटाबेस विक्रेताओं SQL
के लिए इंजन के साथ संवाद करने का एकमात्र तरीका है।
हालांकि, मेरे अनुभव में डेटा इनपुट और आउटपुट को प्रबंधित करने के लिए SQL अक्सर बहुत आसान, अधिक बहुमुखी और अधिक प्रोग्रामर-अनुकूल तरीका है। मेरे द्वारा उपयोग की जाने वाली हर अमूर्त परत को कोई वास्तविक लाभ के साथ एक सीमित रूप से सीमित दृष्टिकोण प्रतीत होता है।
... जिस कारण से मैंने अभी ऊपर वर्णित किया है।
डेटाबेस परतें कुछ भी नहीं जोड़ती हैं , वे आपको सीमित करती हैं। वे प्रश्नों को विवादित रूप से अधिक सरल बनाते हैं लेकिन कभी अधिक कुशल नहीं होते हैं।
परिभाषा के अनुसार, डेटाबेस परतों में ऐसा कुछ भी नहीं है जो अंदर नहीं है SQL
।
क्या SQL
इतना भयानक है, और क्यों डेटाबेस अमूर्त परतों मूल्यवान हैं?
SQL
एक अच्छी भाषा है, हालांकि, इसके साथ काम करने के लिए कुछ मस्तिष्क मोड़ लेता है।
सिद्धांत रूप में, SQL
घोषणात्मक है, कि क्या आप घोषणा करते हैं कि आप क्या प्राप्त करना चाहते हैं और इंजन इसे सबसे तेज़ तरीके से प्रदान करता है।
व्यवहार में, एक सही क्वेरी तैयार करने के कई तरीके हैं (यह प्रश्न है जो सही परिणाम लौटाता है)।
ऑप्टिमाइज़र कुछ पूर्वनिर्धारित एल्गोरिदम से बाहर लेगो महल बनाने में सक्षम हैं (हाँ, वे कई हैं), लेकिन वे सिर्फ नए एल्गोरिदम नहीं बना सकते हैं। यह अभी भी SQL
उनकी सहायता के लिए एक डेवलपर लेता है।
हालांकि, कुछ लोग आशावादी से "सर्वश्रेष्ठ योजना संभव" का उत्पादन करने की अपेक्षा करते हैं, " SQL
इंजन के दिए गए कार्यान्वयन के साथ इस क्वेरी के लिए उपलब्ध सर्वोत्तम योजना " नहीं।
और जैसा कि हम सभी जानते हैं, जब कंप्यूटर प्रोग्राम लोगों की अपेक्षाओं पर खरा नहीं उतरता है, तो यह प्रोग्राम ही है, जो उम्मीदों पर खरा उतरता है।
ज्यादातर मामलों में, हालांकि, क्वेरी में सुधार करना वास्तव में सबसे अच्छी योजना का उत्पादन कर सकता है। जब असंभव हो तो ऐसे कार्य होते हैं, हालांकि, SQL
इन मामलों में नए और बढ़ते सुधार के साथ संख्या में कम और कम हो जाता है।
यह अच्छा होगा, हालांकि, अगर विक्रेताओं ने "इंडेक्स रेंज प्राप्त करें" जैसे फ़ंक्शन के लिए कुछ निम्न-स्तरीय पहुंच प्रदान की है, तो rowid
"आदि द्वारा एक पंक्ति प्राप्त करें " जैसे C
कंपाइलर आपको असेंबली को भाषा में सही एम्बेड करने देते हैं।
मैंने हाल ही में अपने ब्लॉग में इस पर एक लेख लिखा है: