2010-11-04 8 views
10

एक निश्चित क्वेरी है जिसे एएसपी .NET पृष्ठ से बुलाया जा रहा है। मैंने प्रबंधन स्टूडियो में उस क्वेरी की निष्पादन योजना का अध्ययन किया और 87% एक तरह के लिए है। मुझे बुरी तरह से सॉर्टिंग की आवश्यकता है या फिर प्रदर्शित डेटा बेकार होगा।क्या मैं एक निश्चित परिणाम सेट को कैश करने के लिए SQL सर्वर का अनुरोध कर सकता हूं?

क्या वैसे भी है कि मैं SQL सर्वर से सॉर्ट किए गए परिणाम सेट को कैश करने का अनुरोध कर सकता हूं ताकि यह परिणामी रनों में डेटा को तेज़ी से वापस कर दे?

या SQL सर्वर कैश हैंडलिंग करने के लिए पर्याप्त स्मार्ट सर्वर है और क्या मैं इसे कैश परिणामों के लिए मजबूर करने की कोशिश करके गलती कर रहा हूं, यदि यह संभव है?

किसी भी प्रासंगिक जानकारी अत्यधिक सराहना की और हो जाएगा धन्यवाद अग्रिम :) में एक बहुत

अद्यतन:
मैं सिर्फ एक लेख में पढ़ा है कि एक क्लस्टर सूचकांक के साथ एक दृश्य बनाने प्रदर्शन में वृद्धि होगी क्योंकि अनुक्रमणित करेगा डेटा को डिस्क में देखने के लिए जारी रखें। क्या ये सच है? मैं यह करने के बारे में कैसे प्राप्त करूं? कोई लेख?

उत्तर

11

संक्षेप में, नहीं: SQL सर्वर अंत में नहीं; यदि संभव हो तो यह डेटा को स्मृति में लोड कर देगा, और निष्पादन योजना कैश करें - इसलिए बाद की कॉल तेज हो सकती है, लेकिन यह परिणाम कैश नहीं कर सकती है।

विकल्प:

  • धुन योजना; सॉर्ट आक्रामक लगता है - क्या आप शायद कुछ डेटा को कम कर सकते हैं या एक इंडेक्स जोड़ सकते हैं (शायद यहां तक ​​कि क्लस्टर्ड इंडेक्स); वहाँ अन्य बातों के हम क्वेरी के साथ क्या कर सकते हैं यदि आप इसे दिखाने के (लेकिन एक पूरी तरह से काम कर रहा डीबी बिना ट्यूनिंग पर सबसे अच्छा guestimation है)
  • कैश हो सकता है परिणाम वेब सर्वर पर यदि वह ऐसा
  • करने के लिए समझदार है
1

कभी-कभी उपयोग किया जाने वाला एक विकल्प सॉर्ट किए गए डेटा को द्वितीयक तालिका में संग्रहीत करना है। यह उदाहरण सकता है एक अस्थायी तालिका बनें जिसे आप केवल सत्र के लिए बनाते हैं, या पूरे डेटाबेस के लिए कैश तालिका बनें।

11

जबकि आप एक indexed view बना सकते हैं, जैसा कि आप अपने अद्यतन में का उल्लेख करने, आप जानते हैं कि होना चाहिए:

  1. का पालन करना पड़ेगा नियमों का काफी एक बहुत कुछ कर रहे हैं, दोनों दृश्य बनाते समय , और टेबल को अद्यतन करते समय जिस पर यह आधारित है , और,
  2. बस वहाँ है, क्योंकि एक (क्लस्टर) सूचकांक, कि एक तरह से आदेश संकेत नहीं करता है - आप अभी भी जब इस तालिका में जानना चाहते एक ORDER BY का उपयोग करना होगा, और,
  3. जब तक आप उद्यम संस्करण का उपयोग कर रहे , आपको व्यू (NOEXPAND) query hint
  4. के साथ दृश्य से पूछताछ करना होगा, आप CREATE INDEX कथन में एएससी और डीईएससी निर्दिष्ट करके इंडेक्स के लिए ऑर्डर निर्दिष्ट करेंगे, क्रिएट व्यू में नहीं। ऑर्डर में ऑर्डर करने की अनुमति देने के लिए "हैक" (शीर्ष 100 प्रतिशत specicfying द्वारा) का कोई प्रभाव नहीं पड़ेगा।
+0

यकीन नहीं होता द्वारा! Thanx जानकारी के लिए बहुत कुछ :) –

1

फिर से, SQL सर्वर स्वयं स्मृति में लगातार क्वेरी कैश करेगा। आप क्वेरी विश्लेषक का उपयोग करके और एक जटिल क्वेरी को कुछ बार चलाकर इसका परीक्षण कर सकते हैं, हर बार यह तेज़ी से बढ़ जाएगा। यह देखते हुए कि एक स्थायी कैश आवश्यक नहीं हो सकता है।

यदि यह है कि मैं कैश तालिका का उपयोग करने और अपनी क्वेरी चलाने और अन्य तालिका में मान डालने की अनुशंसा करता हूं। कैश को फिर से ताज़ा करने के लिए आप या तो एक अनुप्रयोग चर या अन्य एसक्यूएल तालिका का उपयोग कर सकते हैं। कैश तालिका में डालने के लिए

उदाहरण क्वेरी:

सम्मिलित में कैश का चयन मूल्य, मूल्य तालिका 1 आदेश से फील्ड

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

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