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