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

SQL कथन - अनुक्रमण के साथ गति को कैसे सुधार सकते हैं

यह इंडेक्स शायद मददगार होगा, लेकिन ध्यान रखें कि कोई मुफ्त लंच नहीं है (इंडेक्स को बनाए रखना होगा, इसलिए यह आपके इंसर्ट/अपडेट/डिलीट वर्कलोड को प्रभावित करेगा):

CREATE NONCLUSTERED INDEX unread_emails
  ON dbo.MemberMail(ToMemberID)
  INCLUDE (MemberMailID)
  WHERE ToReadFlag = 0
  AND ToDeletedFlag = 0
  AND FromDeletedFlag = 0
  AND OnHold = 0
  AND ToArchivedFlag = 0;

अब आपकी क्वेरी कह सकती है:

SELECT TOP (1) MemberMailID
  FROM dbo.MemberMail -- dbo prefix
    WITH (INDEX (unread_emails)) -- in case you need to force, though you should not
WHERE ToMemberID = 102
AND ToReadFlag = 0
AND ToDeletedFlag = 0
AND FromDeletedFlag = 0
AND OnHold = 0
AND ToArchivedFlag = 0
ORDER BY ToMemberID; -- ORDER BY is important!

यदि आप क्वेरी के आधार पर इनमें से कुछ फ़्लैग के मान बदलते हैं, तो आप फ़िल्टर के बजाय उन स्तंभों को अनुक्रमणिका की कुंजी में जोड़ने का प्रयोग कर सकते हैं, उदा. मान लें कि कभी-कभी आप OnHold = 0 की जांच करते हैं और कभी-कभी OnHold = 1 :

CREATE NONCLUSTERED INDEX unread_emails
  ON dbo.MemberMail(ToMemberID, OnHold)
  INCLUDE (MemberMailID)
  WHERE ToReadFlag = 0
  AND ToDeletedFlag = 0
  AND FromDeletedFlag = 0
  AND ToArchivedFlag = 0;

आप MemberMailID . होने के साथ भी प्रयोग करना चाह सकते हैं INCLUDE . के बजाय कुंजी में . उदा.:

CREATE NONCLUSTERED INDEX unread_emails
  ON dbo.MemberMail(ToMemberID, MemberMailID)
  WHERE ToReadFlag = 0
  AND ToDeletedFlag = 0
  AND FromDeletedFlag = 0
  AND OnHold = 0
  AND ToArchivedFlag = 0;

हो सकता है कि ये अंतर आपके डेटा और उपयोग के पैटर्न के लिए मायने न रखें, लेकिन आप जितना हम अनुमान लगा सकते हैं, उससे कहीं अधिक आसानी से आप अंतरों का परीक्षण कर पाएंगे।



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

  2. किसी लिंक किए गए एसक्यूएल सर्वर में डालने को सही तरीके से कैसे ट्रिगर करें?

  3. SQL सर्वर 2008 में 'से' खंड में तालिका नाम के लिए एक चर का उपयोग करना

  4. एसक्यूएल में कुल मिनट के लिए डेटाटाइम

  5. मौजूदा तालिका में एक कॉलम जोड़ें और उन्हें विशिष्ट रूप से एमएस एसक्यूएल सर्वर पर नंबर दें