आपके प्रश्न का उत्तर देने के लिए, इसे थोड़ा अलग करने की आवश्यकता है:
SELECT *
इसके 3 मुख्य प्रकार के नुकसान हैं:
- कोड रखरखाव:SELECT * का उपयोग करने से जटिल तालिकाओं/प्रश्नों की सुपाठ्यता कम हो जाती है, और जब क्लाइंट एप्लिकेशन किसी क्वेरी से एक निश्चित परिणाम की अपेक्षा करता है, लेकिन तालिका बदल जाती है, तो समस्याएँ पैदा हो सकती हैं
- नेटवर्क प्रदर्शन:क्लाइंट एप्लिकेशन पर परिणाम लौटाते समय SELECT * का उपयोग करने का अर्थ है कि सभी कॉलम क्लाइंट को वापस कर दिए जाएंगे; यदि क्लाइंट द्वारा केवल उनमें से कुछ कॉलम का उपयोग किया जाता है, तो बैंडविड्थ बर्बाद हो जाती है और एप्लिकेशन धीमी गति से चलता है।
- इंडेक्सिंग / क्वेरी योजना प्रदर्शन:कुछ परिस्थितियों में, यदि आपके पास कोई क्वेरी है जो वास्तव में केवल उन स्तंभों को वापस करने की आवश्यकता है जो एक अनुक्रमणिका में भाग लेते हैं, लेकिन आप उन सभी को वापस कर देते हैं, तो आप द्वारा बनाई गई बहुत खराब क्वेरी योजनाएं प्राप्त कर सकते हैं इंजन।
मुझे यकीन नहीं है कि "वाइल्डकार्ड व्याख्या के संबंध में निहितार्थ" से आपका क्या मतलब है, लेकिन मुझे संदेह है कि आप गलत समझ रहे हैं कि SELECT * एक बुरा विचार क्यों है - SQL इंजन वैसे भी प्रदान किए गए कॉलम को मान्य करता है; वाइल्डकार्ड को "विस्तारित" करने की लागत अनिवार्य रूप से 0 है।
एक संग्रहीत कार्यविधि वास्तव में "कोड की संकलित इकाई" नहीं है:किसी संग्रहीत कार्यविधि के लिए क्वेरी योजना को आमतौर पर पहले चलने के बाद कैश किया जाएगा, लेकिन यह वास्तव में कई/अधिकांश परिस्थितियों में एड-हॉक SQL कथनों के लिए भी सच है।पी>
अब, वास्तव में आपके प्रश्न का उत्तर देने के लिए:हां , SELECT *
. का उपयोग करने के कोई नुकसान एड-हॉक SQL में भी, समान रूप से, एक संग्रहीत कार्यविधि के अंदर SQL पर लागू होता है।