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

फंक्शन कॉल जहां क्लॉज

एसक्यूएल के साथ हमेशा की तरह, वास्तविक स्कीमा को जानने के बिना क्वेरी काफी हद तक अप्रासंगिक है।

क्या आपके पास सदस्यों पर एक अनुक्रमणिका है।फ़ोन? यदि नहीं, तो इससे कोई फर्क नहीं पड़ता कि आप क्वेरी कैसे लिखते हैं, वे सभी पूरी तालिका को स्कैन करेंगे और वही प्रदर्शन करेंगे (यानी खराब प्रदर्शन)। यदि आपके पास एक अनुक्रमणिका है फिर जिस तरह से आप क्वेरी लिखते हैं, उससे बहुत फर्क पड़ता है:

SELECT * FROM Members WHERE Phone= @Phone;
SELECT * FROM Members WHERE Phone= dbo.FormatPhone(@Phone);
SELECT * FROM Members WHERE  dbo.FormatPhone(Phone)[email protected];

पहली क्वेरी की गारंटी इष्टतम है, इंडेक्स पर फोन की तलाश करेगी।
दूसरी क्वेरी dbo.FormatPhone की विशेषताओं पर निर्भर करती है। यह एक इष्टतम खोज का उपयोग कर सकता है या नहीं भी कर सकता है।
आखिरी क्वेरी खराब होने की गारंटी है। तालिका स्कैन करेगा।

साथ ही, मैंने NOLOCK संकेत हटा दिया, यह दिन का विषय प्रतीत होता है... देखें एसक्यूएल में नोलॉक के लिए सिंटैक्स . NOLOCK हमेशा है गलत उत्तर। स्नैपशॉट अलगाव का उपयोग करें।



  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 सर्वर में NULLs से निपटना

  2. SQL सर्वर में गतिशील SQL निष्पादन

  3. SQL सर्वर त्रुटि 1934 INSERT पर गणना कॉलम PHP/PDO के साथ तालिका में होती है

  4. कई परिणाम सेट के साथ निष्पादन के साथ INSERT INTO

  5. उपयोगकर्ता द्वारा परिभाषित तालिका प्रकारों पर EXECUTE अनुमति अस्वीकार कर दी गई है?