प्रश्न: TOP या LIMIT का उपयोग किए बिना शीर्ष 10 पंक्तियों को पुनः प्राप्त करें?
उत्तर: जब मुझसे हाल ही में व्यापक डेटाबेस प्रदर्शन स्वास्थ्य जांच . में यह प्रश्न पूछा गया था , मैंने उस व्यक्ति से वापस पूछा कि वह पहिया का पुन:आविष्कार क्यों करना चाहता है। हालाँकि, जब मुझे उनका उत्तर मिला तो मैं वास्तव में अब तर्क से सहमत हूँ।
यहां कारण है: हम TOP या LIMIT का उपयोग नहीं करना चाहते क्योंकि वे वास्तव में ANSI कार्यान्वयन नहीं हैं। हम शीर्ष पंक्तियों को इस तरह से पुनः प्राप्त करना चाहते हैं कि यह SQL सर्वर, MySQL, MariaDB और PostgreSQL जैसे विभिन्न डेटाबेस में काम कर सके।
सभी डेटाबेस ने शीर्ष पंक्तियों को पुनः प्राप्त करने के लिए अपने स्वयं के तर्क को लागू किया है। SQL सर्वर TOP का उपयोग करता है कीवर्ड जबकि MySQL, MariaDB और PostgreSQL LIMIT . का उपयोग करते हैं SQL सर्वर में पंक्तियों को प्रतिबंधित करने के लिए कीवर्ड। यह तीसरे पक्ष के विक्रेताओं के लिए अनूठी चुनौतियां प्रस्तुत करता है जो कोड लिख रहे हैं जिसे किसी भी आरडीबीएमएस में प्लग किया जा सकता है। उन्हें कोड डायन की स्थिति लिखनी होती है और तर्क के दो अलग-अलग संस्करण बनाए रखने होते हैं। हालाँकि, यदि आप निम्न विधि का उपयोग करते हैं तो यह संबंधपरक डेटाबेस के सभी हाल के संस्करणों में काम करेगा।
ROUTINE_SCHEMA, ROUTINE_NAME, ROUTINE_DEFINITIONFROM चुनें (ROUTINE_SCHEMA, ROUTINE_NAME, ROUTINE_DEFINITION, ROW_NUMBER() OVER (ORDER BY ROUTINE_NAME) AS ROWNUMFROM INFORMATION_SCHEMA.ROUTINESWHEREयह मेरे सामने आए सभी ज्ञात रिलेशनल डेटाबेस के साथ काम करेगा। जबकि हम TOP और LIMIT का उपयोग करना पसंद करते हैं, अक्सर यह अनुशंसा की जाती है कि हम उस तर्क का उपयोग करते रहें जो कई रिलेशनल डेटाबेस में काम करता है। यहां अन्य ब्लॉग पोस्ट हैं जो आपको रुचिकर लग सकती हैं:
- एसक्यूएल सर्वर - एसएसएमएस 18 पर प्राथमिकता बूस्ट सर्वर कॉन्फ़िगरेशन विकल्प को बंद करना
- एसक्यूएल सर्वर - RowCount के साथ इंडेक्स फ्रैगमेंटेशन की जांच करने के लिए नमूना स्क्रिप्ट
- एसक्यूएल पहेली - स्कीमा और टेबल निर्माण - बिना रनिंग कोड के उत्तर
- कैसे पता चलेगा कि अनुक्रमणिका क्वेरी के लिए बाध्य है? - सप्ताह #246 का साक्षात्कार प्रश्न