2015-05-19 8 views
5

पर चुनें * निम्नलिखित पोस्ट में एसक्यूएल में select * के उपयोग से बचने के लिए अनिवार्य कारण थे।बेस्ट प्रैक्टिस: सीटीई

Why is SELECT * considered harmful?

चर्चा में है जब यह था या फिर भी मैं आम तालिका अभिव्यक्ति (CTE) पर चर्चा नहीं मालूम था select * उपयोग करने के लिए स्वीकार्य नहीं था के उदाहरण था। क्या सीटीई में select * का उपयोग करने के लिए कोई कमी है?

उदाहरण:

WITH CTE1 AS 
(
    SELECT Doc, TotalDue 
    FROM ARInvoices 
    WHERE CustomerName = 'ABC' 
    UNION 
    SELECT Doc, - TotalDue 
    FROM ARInvoiceMemos 
    WHERE CustomerName = 'ABC' 
) 

select * from CTE1 
UNION 
Select 'Total' as Doc, sum(TotalDue) 
FROM CTE1 
+0

मेरा मानना ​​है कि आपके द्वारा लिंक किए गए प्रश्न में बताए गए कारणों के लिए सीटीई के लिए भी यही मामला लागू होता है। हालांकि मुझे यह साबित करने के लिए कोई दस्तावेज नहीं मिल रहा है। –

+4

यहां कोई कमी नहीं है। वही व्युत्पन्न सारणी 'चयन * से लागू होता है (t, as, b, c को कुछ_table से चुनें) t' के रूप में –

उत्तर

2

के बाद से आप पहले से ही ठीक से cte में स्तंभ नाम सूचीबद्ध, मैं cte से select * प्रयोग करने में कोई नुकसान नहीं दिख रहा।
वास्तव में, यह select * का उपयोग करने के लिए सही जगह हो सकता है, क्योंकि कॉलम को दो बार सूचीबद्ध करने का कोई मतलब नहीं है।
जब तक आपको cte द्वारा दिए गए सभी कॉलम का उपयोग करने की आवश्यकता नहीं है। (यानी cte में एक कॉलम का उपयोग क्वेरी पर किया जाता है, लेकिन select खंड में नहीं) उस स्थिति में, मैं केवल उन स्तंभों को सूचीबद्ध करने का सुझाव दूंगा जिनकी आपको आवश्यकता है, cte पर इंगित कर रहे हैं।

ध्यान दें कि यदि cte स्वयं select * का उपयोग करता है तो आपके द्वारा लिंक किए गए पोस्ट में सूचीबद्ध सभी दोष इस पर लागू होते हैं।

मेरे select * करने के लिए मुख्य आपत्ति यह है कि यह आम तौर पर आलसी डेवलपर्स कि * के परिणामों पर विचार नहीं करता द्वारा प्रयोग किया जाता रहा है।

नोट: मैंने जो कुछ भी लिखा है वह भी व्युत्पन्न तालिकाओं पर लागू होता है।

2

सिद्धांत रूप में अंगूठे का नियम select * बीमार सलाह हमेशा लागू होती है।

अभ्यास में हालांकि, यदि आप एक डेवलपर हैं जो डिज़ाइन और सामान्य अच्छे प्रोग्रामिंग अभ्यास जैसी चीजों को कार्यक्षमता के रूप में महत्वपूर्ण मानते हैं, तो आपके सीटीई को केवल उन स्तंभों को वापस करने के लिए कोड किया जाएगा जो वास्तव में आवश्यक हैं, इसलिए select * from CTE1 हो सकता है बहुत बुरा।

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