Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

SQL सर्वर 2008:डेटाटाइम द्वारा ऑर्डर करना बहुत धीमा है

id . द्वारा आदेश देना datetime . द्वारा ऑर्डर करते समय शायद क्लस्टर्ड इंडेक्स स्कैन का उपयोग करता है सॉर्टिंग या इंडेक्स लुकअप का उपयोग करता है।

क्लस्टर इंडेक्स स्कैन की तुलना में ये दोनों विधियां अधिक धीमी हैं।

यदि आपकी तालिका id . द्वारा संकुलित है , मूल रूप से इसका मतलब है कि यह पहले से ही सॉर्ट किया गया है। रिकॉर्ड एक B+Tree . में समाहित हैं जिसमें id . में पृष्ठों को जोड़ने वाली एक लिंक की गई सूची है गण। id . द्वारा रिकॉर्ड किए गए रिकॉर्ड प्राप्त करने के लिए इंजन को केवल लिंक की गई सूची को पार करना चाहिए ।

अगर id अनुक्रमिक क्रम में s सम्मिलित किए गए थे, इसका अर्थ है कि पंक्तियों का भौतिक क्रम तार्किक क्रम से मेल खाएगा और संकुल अनुक्रमणिका स्कैन और भी तेज़ होगा।

यदि आप चाहते हैं कि आपके रिकॉर्ड datetime . द्वारा ऑर्डर किए जाएं , दो विकल्प हैं:

  • तालिका से सभी रिकॉर्ड लें और उन्हें क्रमबद्ध करें। धीमापन स्पष्ट है।
  • इंडेक्स का उपयोग datetime पर करें . इंडेक्स को डिस्क के एक अलग स्थान में संग्रहीत किया जाता है, इसका मतलब है कि इंजन को नेस्टेड लूप में इंडेक्स पेज और टेबल पेज के बीच शटल की जरूरत होती है। यह और भी धीमा है।

ऑर्डरिंग को बेहतर बनाने के लिए, आप datetime . पर एक अलग कवरिंग इंडेक्स बना सकते हैं :

CREATE INDEX ix_mytable_datetime ON mytable (datetime) INCLUDE (field1, field2, …)

, और अपनी क्वेरी में आपके द्वारा उपयोग किए जाने वाले सभी स्तंभों को उस अनुक्रमणिका में शामिल करें।

यह इंडेक्स आपकी टेबल की शैडो कॉपी की तरह है लेकिन डेटा को अलग-अलग क्रम में सॉर्ट किया गया है।

यह कुंजी लुकअप से छुटकारा पाने की अनुमति देगा (चूंकि अनुक्रमणिका में सभी डेटा शामिल हैं) जो datetime द्वारा आदेश देगा id . पर जितनी जल्दी हो सके ।

अपडेट करें:

इस समस्या पर एक ताज़ा ब्लॉग पोस्ट:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर 2005 में, क्या मैं अपनी टेबल पर संपत्ति सेट किए बिना कैस्केड हटा सकता हूं?

  2. पाठ डेटाटाइप के साथ SQL सर्वर में संग्रहीत XML दस्तावेज़ पढ़ें?

  3. SQL सर्वर में DENSE_RANK () कैसे काम करता है

  4. मैं SQL सर्वर के साथ INNER JOIN का उपयोग करके कैसे हटा सकता हूं?

  5. आधिकारिक छवि के शीर्ष पर एक कस्टम SQL सर्वर डॉकर छवि बनाना