2010-03-11 21 views
7

अधिक कुशल है - एसक्यूएल में केस कथन के साथ हैंडलिंग या कोड में कथन का उपयोग करते हुए उसी डेटा को संभालने के लिए। मैं पूछ रहा हूं क्योंकि मेरे सहयोगी की एक बड़ी पूछताछ है जिसमें कई केस स्टेटमेंट हैं। मैंने सलाह दी कि वह केस स्टेटमेंट को कोड करके डीबी से तनाव दूर करें। मैंने पाया है कि यह अधिक कुशल है ... लेकिन क्यों?स्टेटमेंट्स बनाम कोड कोड

+1

यह अस्पष्ट है। आम तौर पर लोग आपको डेटाबेस में डीबी डेटा प्रश्नों को संभालने की सलाह देंगे, और याद रखें कि आप कोड (समूह/संघ/भेद) में डीबी पैटर्न को बनाए रखने की कोशिश में बहुत सारी परेशानी में चल सकते हैं, जो कि डीबीएस के लिए बनाई गई है ... –

+2

ऐसा लगता है कि आपको डीबी देवों पर इस प्रश्न को और अधिक लक्षित करना चाहिए, एकल एसक्यूएल टैग वास्तव में पर्याप्त नहीं है, आप SQL डेटा बेस का क्या स्वाद उपयोग कर रहे हैं? – AnthonyWJones

उत्तर

19

वहाँ एक और भी है पर डेटा के कम से कम राशि को खींचने के लिए चाहते हैं बना रहे हैं मौलिक प्रश्न जो यहां नहीं पूछा जा रहा है: ये CASE कथन वास्तव में क्या कर रहे हैं?

एक मिनट के लिए प्रदर्शन भूल जाओ। यदि CASE का उपयोग केवल क्वेरी के अंतिम आउटपुट को बदलने के लिए किया जा रहा है, और वास्तव में एएसपी में if या select case के साथ समान कार्यक्षमता को प्रतिस्थापित करना संभव है, तो संभवतः इसका मतलब है कि डेटाबेस क्वेरी/प्रक्रिया यूआई चीजों को करने की कोशिश कर रही है स्वरूपण के लिए जिम्मेदार होना चाहिए। अलगाव-संबंधी चिंताओं का मुद्दा किसी भी संभावित प्रदर्शन मुद्दे से अधिक गंभीर है।

आप इस तरह एक प्रश्न है, तो:

SELECT InvoiceID, InvoiceDate, 
    CASE WHEN PaidStatus = 0 THEN 'Unpaid' ELSE 'Paid' END 
FROM ... 

यह सिर्फ मूर्ख है, क्योंकि यूआई, या जो कुछ भी परत डेटा करने के लिए डोमेन मानचित्रण करता है, कैसे डेटाबेस में एक स्थिति परिवर्तित करने के लिए पता होना चाहिए इसके संबंधित विवरण के लिए। यह तर्क में इस तर्क को शामिल करने का कोई अर्थ नहीं है।

दूसरी ओर, यदि CASE निर्माण क्वेरी का एक अनिवार्य हिस्सा है, जैसे:

SELECT 
    SUM(CASE WHEN PaidStatus = 0 THEN Amount ELSE 0 END) AS TotalUnpaid, 
    SUM(CASE WHEN PaidStatus = 1 THEN Amount ELSE 0 END) AS TotalPaid 
FROM ... 

भी, यूआई के लिए इस तरह के तर्क को स्थानांतरित करने की कोशिश मत करो क्योंकि डेटाबेस ज्यादा है इसमें बेहतर है। और CASE अर्थात् क्वेरी का एक हिस्सा है ("x" के लिए कुल भुगतान और अवैतनिक रकम गणना करें), यह किसी भी UI फ़ंक्शन को नहीं ले रहा है।

इस बारे में चिंता करें कि तर्क वास्तव में किस चीज को पूरा करने का इरादा रखता है उसके आधार पर संबंधित है। प्रदर्शन चिंताओं को केवल चर्चा में प्रवेश करना चाहिए यदि आप वास्तव में महत्वपूर्ण प्रदर्शन समस्या देख रहे हैं।

+0

महान जवाब! बहुत उपयोगी! ठीक वही जो मेरे द्वारा खोजा जा रहा था। – Eric

2

मेरे अनुभव में हमारे डेटाबेस सर्वर हमारे एप्लिकेशन सर्वर से बहुत अधिक बड़े हैं और आमतौर पर 30% निष्क्रिय से नीचे बैठे हैं। डेटाबेस को डेटा प्रबंधित करें, फिर परिणामसेट के माध्यम से क्लाइंट को फिर से चालू करें। यह बेहतर अभ्यास है कि डेटाबेस केवल आपके द्वारा आवश्यक डेटा लौटाए (यदि आप इसे आगे निर्धारित कर सकते हैं)।

5

CASE बयान क्योंकि प्राथमिकता दी जाती है:

  • एसक्यूएल: वे, एएनएसआई मानक हैं परिवर्तन
  • की आवश्यकता के बिना यह अन्य डेटाबेस के लिए पोर्टेबल बनाने वे समर्थन "लघु सर्किटिंग"
1

आप चाहिए डेटाबेस में डेटा (फ़िल्टर और सॉर्ट करें), और प्रस्तुतिकरण स्तर पर प्रस्तुति छोड़ दें। यह दो प्रमुख कारणों के लिए है:

  • डेटाबेस फिल्टर करने के लिए और डेटा को सॉर्ट
  • आप डीबी से तार के रूप में आवश्यक
0

जैसा कि मैंने पढ़ा है, यहां बुनियादी पूछताछ यह है कि अगर SQL में SQL से बेहतर है। उत्तर भी आपकी स्थितियों की गहराई पर निर्भर करता है। यहां एक अच्छा लेख मिला। किसी के लिए उपयोगी हो सकता है। http://www.4guysfromrolla.com/webtech/102704-1.shtml

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