2015-01-16 8 views
5

हैं [स्तम्भ 1] अनुक्रमणित है, अगले क्वेरी इंडेक्स का उपयोग हो सकता है:T-SQL की तरह चर और सूचकांक का उपयोग कर

SELECT * FROM [table] WHERE [column1] LIKE 'starts%' 

अगर मैं एक चर परिचय, क्वेरी के नीचे का उपयोग कभी नहीं होगा सूचकांक:

DECLARE @starts nvarchar(100) 
SET @starts = 'starts%' 
SELECT * FROM [table] WHERE [column1] LIKE @starts 

मैं उपयोगकर्ता इनपुट के आधार पर StartsWith खोज लागू करना चाहते हैं और मुझे यकीन है कि किस तरह से चयन करने के लिए नहीं कर रहा हूँ:

  1. भागने उपयोगकर्ता इनपुट ठीक से जैसे इतना अनुकूलक (FORCESEEK)

  2. उपयोग विकल्प (RECOMPILE)
+0

एक और विकल्प पूर्ण टेक्स्ट खोज में देखना है। – Mihai

+2

आपकी दूसरी क्वेरी इंडेक्स का उपयोग क्यों नहीं करेगी? – Lock

+0

मैं कुछ सामान्यीकृत तरीके से दूसरी क्वेरी संकलन चर के कारण अब – svolkov

उत्तर

4

एक और विकल्प आप श्रेणी में नहीं रखा है के साथ शाब्दिक

  • उपयोग पर आधारित एक योजना लेने के लिए सक्षम हो जाएगा के लिए। आप अनुमानित परिवर्तनीय मानों की प्रकृति के बारे में सही धारणा बनाने के लिए क्वेरी ऑप्टिमाइज़र को मजबूर करने के लिए OPTIMIZE FOR विकल्प का उपयोग कर सकते हैं। ऐसा लगता है कि आपकी ज़रूरत बहुत अच्छी तरह से मिलती है।

    DECLARE @starts nvarchar(100) 
    SET @starts = 'starts%' 
    SELECT * FROM [table] WHERE [column1] LIKE @starts 
    OPTION (OPTIMIZE FOR (@starts = 'mnopq%')) 
    

    यह this blog में अधिक विस्तार से वर्णित है। MSDN documentation भी है।

    जब क्वेरी संकलित और अनुकूलित है एक स्थानीय चर के लिए एक विशेष मान का उपयोग करने के लिए क्वेरी अनुकूलक का निर्देश देता है। मूल्य का उपयोग क्वेरी ऑप्टिमाइज़ेशन के दौरान पर किया जाता है, न कि क्वेरी निष्पादन के दौरान।

  • +0

    मुझे वैसे भी उपयोगकर्ता के इनपुट के अंदर OPTIMIZE के अंदर से बचने के लिए सही है? – svolkov

    +0

    मैंने अभी एडवेंचरवर्क्स 2008 पर इसका परीक्षण किया है और यह काम नहीं करता है :(। ['QUERY'] (http://tinypic.com/r/2nkl17d/8) और ['निष्पादन योजनाएं]] (http: // tinypic .com/r/4htpqb/8) –

    +0

    मैंने परीक्षण किया और यह काम करता है, हालांकि मुझे पहली पसंद – svolkov

    संबंधित मुद्दे