2008-08-05 4 views
14

क्या आपने कभी किसी भी त्रुटि संदेश को देखा है?क्या आपने कभी एक प्रश्न का सामना किया है कि SQL सर्वर निष्पादित नहीं कर सका क्योंकि यह बहुत सी तालिकाओं का संदर्भ देता है?

- SQL Server 2000

दृश्य या समारोह समाधान के लिए सहायक तालिका का आवंटन नहीं हो सका।
एक क्वेरी (256) में तालिकाओं की अधिकतम संख्या पार हो गई थी।

- SQL सर्वर 2005

बहुत सारे तालिका क्वेरी में नाम। अधिकतम स्वीकार्य 256 है।

यदि हां, तो आपने क्या किया है?

दिया गया? ग्राहक को उनकी मांगों को सरल बनाने के लिए आश्वस्त किया? डेटाबेस को denormalized?


@ (हर कोई मुझे क्वेरी पोस्ट करने के लिए इच्छुक):

  1. मैं अगर मैं जवाब संपादन विंडो में कोड के 70 किलोबाइट पेस्ट कर सकते हैं यकीन नहीं है।
  2. यहां तक ​​कि यदि मैं यह कर सकता हूं तो यह मदद नहीं करेगा क्योंकि इस 70 किलोबाइट कोड 20 या 30 विचारों का संदर्भ देगा जो मुझे पोस्ट करना होगा क्योंकि अन्यथा कोड अर्थहीन होगा।

मैं ऐसा नहीं करना चाहता जैसे कि मैं यहां घमंड कर रहा हूं लेकिन समस्या प्रश्नों में नहीं है। प्रश्न इष्टतम (या कम से कम लगभग इष्टतम) हैं। मैंने उन्हें अनुकूलित करने के अनगिनत घंटे बिताए हैं, हर कॉलम और हर एक टेबल को हटाया जा सकता है जिसे हटाया जा सकता है। ऐसी रिपोर्ट की कल्पना करें जिसमें 200 या 300 कॉलम हैं जिन्हें एकल चयन कथन से भरना होगा (क्योंकि इस तरह यह कुछ साल पहले बनाया गया था जब यह अभी भी एक छोटी रिपोर्ट थी)।

+0

क्या आप SQL Server 2000 SP3 का उपयोग कर रहे हैं? – Stu

+0

क्या आप संभवतः कुछ विचार बना सकते हैं? –

+1

विचार मदद नहीं करेंगे। दृश्यों में उपयोग की जाने वाली सारणी भी सीमा की ओर गिनती हैं। –

उत्तर

8

SQL सर्वर 2005 के लिए, मैं तालिका चर का उपयोग करने की सलाह दूंगा और आंशिक रूप से डेटा को आपके साथ जाने के साथ ही निर्माण करूँगा।

ऐसा करने के लिए, एक मेज चर कि अपने अंतिम परिणाम सेट आप उपयोगकर्ता के लिए भेजना चाहते हैं का प्रतिनिधित्व करता है बनाएँ।

फिर अपनी प्राथमिक तालिका (उपर्युक्त उदाहरण में ऑर्डर टेबल कहें) ढूंढें और उस डेटा को खींचें, साथ ही पूरक डेटा का थोड़ा सा जो केवल एक में शामिल हो (ग्राहक का नाम, उत्पाद का नाम)। आप इसे सीधे अपने टेबल वैरिएबल में रखने के लिए एक चयन कर सकते हैं।

वहाँ से, तालिका के माध्यम से और प्रत्येक पंक्ति के लिए पुनरावृति, छोटे चयन प्रश्नों का एक समूह है कि सभी पूरक डेटा आप अपने परिणाम सेट के लिए की जरूरत को पुन: प्राप्त करते हैं। जैसे ही आप जाते हैं, प्रत्येक कॉलम में इन्हें डालें।

ऐसा होने के बाद, आप तो अपने तालिका चर से एक सरल चुनें * करते हैं और इस परिणाम उपयोगकर्ता के लिए सेट लौट सकते हैं।

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

1

मैं इस तरह की स्थिति में कभी नहीं आया हूं, और संदर्भ में 256 टेबलों को संदर्भित करने के विचार को ईमानदार होने के लिए मुझे एक प्राणघातक डर के साथ फाइल करता है।

आपका पहला सवाल शायद द्वारा "क्यों इतने सारे?", बारीकी से पीछा करना चाहिए "सूचना के क्या बिट्स मैं नहीं जरूरत ?" मुझे चिंता होगी कि ऐसी क्वेरी से लौटाए जाने वाले डेटा की मात्रा बहुत ही गंभीर रूप से आवेदन के प्रदर्शन को प्रभावित करेगी।

+0

एक ग्राहक जो एक सूची और उनकी दुकानों में वस्तुओं की वास्तव में सूचना के संबंधित टुकड़े का एक बहुत के साथ देखने के लिए (एक ग्रिड में) चाहता है कल्पना कीजिए (जैसे हर आइटम के बारे में अंतिम आदेश, पहली ही गेंद के बारे में पहले के आदेश, आखिरी गेंद के बारे में के बारे में , ग्राहकों को खरीदने के बारे में, वितरण की लागत के बारे में, ...)। मेरा विश्वास करो, यह संभव है, मैंने इसे देखा है। और मुझे इसका सामना करना पड़ा। :) हां, ऐसी परिस्थितियों में प्रदर्शन पर असर गंभीर हो सकता है। –

0

मैं उस क्वेरी को देखना चाहता हूं, लेकिन मुझे लगता है कि यह किसी प्रकार के इटरेटर के साथ कुछ समस्या है, और जब भी मैं इसे किसी भी परिस्थिति के बारे में नहीं सोच सकता, तो मुझे लगता है कि यह खराब है/केस/कर्सर से या खराब कार्यान्वित विचारों का एक टन।

+0

किसी भी प्रकार का पुनरावर्तक नहीं। बस एक ही चयन कथन। –

1

@chopeen आप इन आंकड़ों की गणना करने के तरीके को बदल सकते हैं, और इसके बजाय सभी प्रति-उत्पाद आंकड़ों की एक अलग तालिका रख सकते हैं .. जब ऑर्डर दिया जाता है, तो उत्पादों के माध्यम से लूप करें और आंकड़ों में उचित रिकॉर्ड अपडेट करें तालिका। रिपोर्ट चलाने के दौरान यह एक बड़ी क्वेरी में सबकुछ चलाने के बजाए चेकआउट पेज पर बहुत सारे गणना लोड को स्थानांतरित कर देगा। बेशक कुछ आंकड़े हैं जो इस तरह से काम नहीं करेंगे, उदाहरण के लिए किसी विशेष उत्पाद को खरीदने के बाद ग्राहकों की अगली खरीदारी को ट्रैक करना।

0

पोस्ट क्वेरी: डी

इसके अलावा, मैं नाम/मान टेबल जो एक लुकअप तालिका में संघनित कर सकता है की एक टन (पढ़ 200) होने हो सकता है संभव समस्याओं में से एक की तरह लग रहा है।

1

यह ऐसा होगा जब SQL Server 2000 पर चल रहे डायनेमिक्स सीआरएम इंस्टॉलेशन के लिए रिपोर्टिंग सेवा रिपोर्ट लिखना होगा। सीआरएम की अच्छी तरह से सामान्यीकृत डेटा स्कीमा है जिसके परिणामस्वरूप बहुत सारे शामिल होते हैं। वास्तव में एक हॉटफिक्स है जो 256 से बढ़कर 260: http://support.microsoft.com/kb/818406 तक सीमित होगा (हमने हमेशा SQL सर्वर टीम के हिस्से पर यह एक बड़ा मजाक सोचा था)।

समाधान, डिली-ओ के रूप में समाधान उचित "सब-जॉइन" (अधिमानतः उन लोगों को जो कई बार उपयोग किया जाता है) की पहचान करना है और उन्हें अस्थायी-सारणी चरों में फैलाएं जिन्हें आप अपने मुख्य जोड़ों में उपयोग करते हैं। यह एक प्रमुख पीआईए है और अक्सर प्रदर्शन को मारता है। मुझे आपके लिये खेद है।

@Kevin, कि टी प्यार - यह सब :-) कहते हैं।

0

मैं इस एक ही समस्या थी ... मेरे विकास बॉक्स एसक्यूएल सर्वर 2008 (दृश्य ठीक काम किया), लेकिन उत्पादन पर नज़र नहीं डाली (SQL सर्वर 2005 के साथ) चलाता है। मैंने त्रुटि को फेंकने वाले दृश्य में क्वेरी के हिस्से के रूप में नए विचारों का उपयोग करके इस सीमा से बचने के लिए विचारों को समाप्त कर दिया।

मूर्खतापूर्ण तार्किक निष्पादन पर विचार की तरह ही है ...

+2

यह अजीब है कि इससे मदद मिली - जहां तक ​​मुझे पता है, विचारों में उपयोग की जाने वाली टेबल सीमा की ओर गिनती है। क्या आप अनुक्रमित विचारों का उपयोग कर रहे हैं? –

0

SQL सर्वर 2005 (2008 में काम किया) में एक ही मुद्दा था जब मैं एक दृश्य बनाने के लिए करना चाहता था। मैंने एक दृश्य के बजाय संग्रहीत प्रक्रिया बनाकर इस मुद्दे को हल किया।

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

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