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

यदि WHERE क्लॉज में एक स्थिरांक को एक पैरामीटर (समान मान वाले) से बदल दिया जाता है, तो क्वेरी बहुत धीमी क्यों हो जाती है?

जैसा कि मार्टिन ने प्रश्न के तहत एक टिप्पणी में सुझाव दिया था, समस्या यह है कि SQL सर्वर WHERE क्लॉज से विधेय को ठीक से नीचे नहीं धकेलता है - उसकी टिप्पणी में लिंक देखें।

मैं एक उपयोगकर्ता परिभाषित तालिका-मूल्यवान फ़ंक्शन बनाने के साथ समाप्त हुआ और दृश्य बनाने के लिए क्रॉस लागू ऑपरेटर के साथ इसका उपयोग करता हूं।

आइए स्वयं समाधान देखें।

उपयोगकर्ता परिभाषित तालिका-मूल्यवान फ़ंक्शन

CREATE FUNCTION [dbo].[TestFunction] (@Id INT)
RETURNS TABLE 
AS
RETURN 
(
    WITH
    Hierarchy (Id,  ParentId, Data, Depth)
    AS(
    SELECT Id, ParentId, NULL AS Data, 0 AS Depth FROM Test Where Id = @Id
    UNION ALL
    SELECT h.Id, t.ParentId, COALESCE(h.Data, t.Data), Depth + 1 AS Depth
        FROM Hierarchy h
            INNER JOIN Test t ON t.Id = h.ParentId
    )
    SELECT * FROM Hierarchy
)

देखें

CREATE VIEW [dbo].[TestView]
AS
SELECT t.Id, t.ParentId, f.Data, f.Depth
FROM
    Test AS t
    CROSS APPLY TestFunction(Id) as f

निरंतर के साथ क्वेरी

SELECT * FROM TestView WHERE Id = 69

पैरामीटर के साथ क्वेरी

DECLARE @Id INT
SELECT @Id = 69
SELECT * FROM TestView WHERE Id = @Id

पैरामीटर के साथ क्वेरी मूल रूप से स्थिरांक के साथ क्वेरी जितनी तेज़ी से निष्पादित होती है।

धन्यवाद मार्टिन और अन्य लोगों के लिए भी!



  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. SQLSERVER में लिस्टएजीजी

  3. प्रबंधन स्टूडियो में तालिकाओं की सूची देखने के लिए अनुमति आवश्यक है

  4. OFFSET/FETCH का उपयोग कर SQL सर्वर में पेजिनेशन

  5. क्या मैं SQL सर्वर एक्सप्रेस या वेब या कार्यसमूह संस्करणों के साथ SSIS पैकेज चला सकता हूँ?