मेरे पास 3 कॉलम वाली एक टेबल है: "आईडी", "ए", "बी"। वे सभी खोजने योग्य हैं। आईडी पहचान है और इसका उपयोग केवल सटीक पंक्तियों को खोजने के लिए किया जाता है, इसलिए यह स्पष्ट है। लेकिन मुझे "ए" और "बी" के बारे में संदेह है। मेरे पास अपने आवेदन में खोजने के लिए 3 मामले हैं: "ए" द्वारा खोजें, "बी" द्वारा खोजें और एक साथ "ए" और "बी" द्वारा खोजें। तो मुझे यकीन नहीं है कि कौन सा इंडेक्स प्रकार चुनना है। क्या मुझे दो सिंगल-कॉलम इंडेक्स या एक मल्टी-कॉलम का उपयोग करना चाहिए? या हो सकता है कि सिंगल-कॉलम इंडेक्स को मल्टी-कॉलम (कुल 3 इंडेक्स) के साथ जोड़ना बेहतर हो? मुझे वास्तव में INSERT/UPDATE/DELETE अवधि की परवाह नहीं है, मेरी लक्षित प्राथमिकता जितनी जल्दी हो सके चयन करना है। मैं SQL सर्वर 2017 का उपयोग करता हूं। धन्यवाद।

1
Ivan Sadovsky 21 अप्रैल 2019, 22:30

1 उत्तर

सबसे बढ़िया उत्तर

मुझे लगता है कि दो अतिरिक्त सूचकांक पर्याप्त होंगे:

CREATE INDEX IDX_YourTable_AB ON YourTable(A,B) -- the first column here which has more different values
CREATE INDEX IDX_YourTable_B ON YourTable(B)INCLUDE(A)

यदि आपके पास इस तालिका में अन्य कॉलम हैं तो आप शामिल इंडेक्स बना सकते हैं:

CREATE INDEX IDX_YourTable_AB ON YourTable(A,B) INCLUDE(C,D,E,...)
CREATE INDEX IDX_YourTable_B ON YourTable(B) INCLUDE(A,C,D,E,...)

सूचकांक IDX_YourTable_AB का उपयोग WHERE A='...' या WHERE A='...' AND B='...' या WHERE A LIKE '...%' AND B='...' की स्थितियों के लिए किया जा सकता है - केवल A कॉलम या A&B कॉलम का उपयोग किया जाता है।

इंडेक्स IDX_YourTable_B का उपयोग केवल B कॉलम (WHERE B='...' या WHERE B LIKE '...%') वाली स्थितियों के लिए किया जा सकता है।

CREATE INDEX IDX_YourTable_B ON YourTable(B)INCLUDE(A) के बजाय CREATE INDEX IDX_YourTable_BA ON YourTable(B,A) का परीक्षण करने का भी प्रयास करें। शायद यह बेहतर होगा।

0
Sergey Menshov 22 अप्रैल 2019, 09:27