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

एक ही समय में 4 मिलियन रिकॉर्ड के खिलाफ दो मौलिक रूप से अलग-अलग प्रश्न निष्पादित होते हैं - एक पाशविक बल का उपयोग करता है

अनुकूलक पर भरोसा करें।

वह प्रश्न लिखें जो सबसे सरलता से व्यक्त करता है कि आप क्या हासिल करने की कोशिश कर रहे हैं। अगर आप प्रदर्शन कर रहे हैं समस्याएं उस क्वेरी के साथ, तो आपको यह देखना चाहिए कि क्या कोई अनुक्रमणिका गुम है या नहीं। लेकिन आपको अभी भी स्पष्ट रूप से . नहीं करना चाहिए इन इंडेक्स के साथ काम करें।

आप कैसे आप . के बारे में सोचकर अपने आप को चिंतित न करें ऐसी खोज को लागू कर सकता है।

बहुत . में दुर्लभ परिस्थितियों में, आपको विशेष अनुक्रमणिका (संकेतों के माध्यम से) का उपयोग करने के लिए क्वेरी को और अधिक बाध्य करने की आवश्यकता हो सकती है, लेकिन यह संभवतः <0.1% क्वेरी है।

आपकी पोस्ट की गई योजनाओं में, आपका "अनुकूलित" संस्करण आपके (मुझे लगता है) Params तालिका (PK_Params_1, IX_Params_1) के 2 अनुक्रमितों के विरुद्ध स्कैन कर रहा है। प्रश्नों को देखे बिना, यह जानना मुश्किल है कि ऐसा क्यों हो रहा है, लेकिन यदि आप एक टेबल ("ब्रूट फोर्स") और दो के खिलाफ एकल स्कैन की तुलना कर रहे हैं, तो यह देखना आसान है कि दूसरा अधिक कुशल क्यों नहीं है।

मुझे लगता है कि मैं कोशिश करूँगा:

        SELECT      p.ProductID, ptr.[Rank]
        FROM        dbo.SearchItemsGet(@SearchID, NULL) AS si
                    JOIN dbo.ProductDefs AS pd
        ON          pd.ParamTypeID = si.ParamTypeID
                    JOIN dbo.Params AS p
        ON          p.ProductDefID = pd.ProductDefID
                    JOIN dbo.ProductTypesResultsGet(@SearchID) AS ptr
        ON          ptr.ProductTypeID = pd.ProductTypeID

LEFT JOIN Params p_anti
    on p_anti.ProductDefId = pd.ProductDefID and
         (p_anti.ParamLo < si.LowMin or p_anti.ParamHi > si.HiMax)


        WHERE       si.Mode IN (1, 2)

AND p_anti.ProductID is null

        GROUP BY    p.ProductID, ptr.[Rank]

अर्थात। एक एंटी-जॉइन पेश करें जो उन परिणामों को समाप्त कर देता है जो आप नहीं चाहते हैं।



  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 सर्वर में दो अन्य कॉलम के बीच कॉलम जोड़ना

  2. SQL सर्वर पूर्ण-पाठ खोज (FTS) के साथ स्टॉपलिस्ट के उपयोग में महारत हासिल करना

  3. एकाधिक डेटाबेस पर SQL क्वेरी

  4. एक क्लिक में कई SQL सर्वर से कैसे जुड़ें (पंजीकृत सर्वर समूह) - SQL सर्वर / TSQL ट्यूटोरियल भाग 5

  5. SQL सर्वर से ईमेल कैसे भेजें?