यदि आपकी स्ट्रिंग 900 बाइट्स से अधिक लंबी है, तो यह एक इंडेक्स कुंजी नहीं हो सकती है, चाहे वह परिवर्तनशील हो या निश्चित लंबाई।
एक विचार यह होगा कि गणना किए गए कॉलम को जोड़कर कम से कम खोज को और अधिक चयनात्मक बनाया जाए। उदा.
CREATE TABLE dbo.Strings
(
-- other columns,
WholeString VARCHAR(4000),
Substring AS (CONVERT(VARCHAR(10), WholeString) PERSISTED
);
CREATE INDEX ss ON dbo.Strings(Substring);
अब अद्यतन करने के लिए कोई पंक्ति खोजते समय, आप कह सकते हैं:
WHERE s.Substring = LEFT(@string, 10)
AND s.WholeString = @string;
यह कम से कम ऑप्टिमाइज़र को अपनी खोज को इंडेक्स पेजों तक सीमित करने में मदद करेगा जहां सटीक मिलान के रहने की सबसे अधिक संभावना है। आप उस लंबाई के साथ प्रयोग करना चाह सकते हैं क्योंकि यह इस बात पर निर्भर करता है कि आपके पास कितने समान स्ट्रिंग्स हैं और कौन सी बात ऑप्टिमाइज़र को एक पेज को अलग करने में सबसे अच्छी मदद करेगी। आप ss
. में कुछ या सभी अन्य स्तंभों को शामिल करके भी प्रयोग करना चाह सकते हैं इंडेक्स, INCLUDE
. के साथ या उपयोग किए बिना खंड (क्या यह उपयोगी है विभिन्न कारकों पर बहुत भिन्न होगा जैसे कि आपकी अपडेट क्वेरी और क्या करती है, पढ़ने/लिखने का अनुपात, आदि)।