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

क्या कथन के साथ प्रति प्रश्न एक बार या प्रति पंक्ति एक बार निष्पादित होता है?

उदाहरण:

SET NOCOUNT ON;
SET IMPLICIT_TRANSACTIONS ON;

CREATE TABLE MyTable (MyID INT  PRIMARY KEY);
GO
INSERT  MyTable (MyID)
VALUES  (11), (22), (33), (44), (55);

PRINT 'Test MyCTE:';
WITH MyCTE
AS (
    SELECT  *, ROW_NUMBER()OVER(ORDER BY MyID) AS RowNum
    FROM    MyTable
)
SELECT  *
FROM    MyCTE crt
LEFT JOIN MyCTE prev ON crt.RowNum=prev.RowNum+1;

ROLLBACK;

यदि आप SSMS में पिछली स्क्रिप्ट चलाते हैं (Ctrl+M दबाएं) -> वास्तविक निष्पादन योजना) तो आपको अंतिम क्वेरी के लिए यह निष्पादन योजना मिल जाएगी:

इस मामले में, सीटीई को crt . के लिए एक बार निष्पादित किया जाता है उपनाम और prev . के लिए पांच (!) बार उपनाम, crt . से प्रत्येक पंक्ति के लिए एक बार ।

तो, इस सवाल का जवाब

bothहै :एक बार प्रति क्वेरी (crt ) और प्रति पंक्ति एक बार (prev :crt . से प्रत्येक के लिए एक बार )।

इस क्वेरी को अनुकूलित करने के लिए, शुरुआत के लिए, 1) आप सीटीई (MyCTE) से परिणामों को संग्रहीत करने का प्रयास कर सकते हैं। या Query ) तालिका चर या अस्थायी तालिका में

2) इस तालिका की प्राथमिक कुंजी को जॉइन कॉलम के रूप में परिभाषित करें,

3) इस तालिका चर या अस्थायी तालिका का उपयोग करने के लिए अंतिम क्वेरी को फिर से लिखें।

बेशक, आप सीटीई के बीच स्वयं शामिल हुए बिना अंतिम क्वेरी को फिर से लिखने का प्रयास कर सकते हैं।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MSSQL में वर्ष और सप्ताह संख्या से निर्माण की तारीख

  2. मिनिमली लॉग इन इन्सर्ट

  3. SQL सर्वर पर INSERT या UPDATE के लिए समाधान

  4. कॉलम में हुए परिवर्तनों की संख्या को कैसे ट्रैक करें? टी-एसक्यूएल - एसक्यूएल सर्वर

  5. SqlCommand 2099 मापदंडों पर अधिकतम पैरामीटर अपवाद