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

किसी अनुक्रमणिका पर LIKE '%...' कैसे खोज सकता है?

ये परीक्षण (डेटाबेस AdventureWorks2008R2) दिखाता है कि क्या होता है:

SET NOCOUNT ON;
SET STATISTICS IO ON;

PRINT 'Test #1';
SELECT  p.BusinessEntityID, p.LastName
FROM    Person.Person p
WHERE   p.LastName LIKE '%be%';

PRINT 'Test #2';
DECLARE @Pattern NVARCHAR(50);
SET @Pattern=N'%be%';
SELECT  p.BusinessEntityID, p.LastName
FROM    Person.Person p
WHERE   p.LastName LIKE @Pattern;

SET STATISTICS IO OFF;
SET NOCOUNT OFF;

परिणाम:

Test #1
Table 'Person'. Scan count 1, logical reads 106
Test #2
Table 'Person'. Scan count 1, logical reads 106

SET STATISTICS IO . से परिणाम दर्शाता है कि LIO समान . हैं .लेकिन निष्पादन योजनाएं काफी अलग हैं:

पहले परीक्षण में, SQL सर्वर एक Index Scan का उपयोग करता है स्पष्ट लेकिन दूसरे परीक्षण में SQL सर्वर एक Index Seek . का उपयोग करता है जो एक Index Seek - range scan . है . अंतिम स्थिति में SQL सर्वर Compute Scalar का उपयोग करता है ऑपरेटर इन मूल्यों को उत्पन्न करने के लिए

[Expr1005] = Scalar Operator(LikeRangeStart([@Pattern])), 
[Expr1006] = Scalar Operator(LikeRangeEnd([@Pattern])), 
[Expr1007] = Scalar Operator(LikeRangeInfo([@Pattern]))

और, Index Seek ऑपरेटर एक Seek Predicate . का उपयोग करता है (अनुकूलित) range scan . के लिए (LastName > LikeRangeStart AND LastName < LikeRangeEnd ) प्लस एक और गैर-अनुकूलित Predicate (LastName LIKE @pattern )।

मेरा उत्तर:यह "वास्तविक" नहीं है Index Seek . यह एक Index Seek - range scan है जिसका, इस मामले में, Index Scan . जैसा ही प्रदर्शन है .

कृपया, Index Seek . के बीच का अंतर भी देखें और Index Scan (इसी तरह की बहस):तो...क्या यह सीक या स्कैन है?

संपादित करें 1: OPTION(RECOMPILE) . के लिए निष्पादन योजना (कृपया हारून की सिफारिश देखें) एक Index Scan . भी दिखाता है (Index Seek . के बजाय ):




  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 संग्रहीत कार्यविधि में गतिशील SQL परिणाम अस्थायी तालिका में होता है

  2. एसक्यूएल सर्वर:अंकगणितीय परिचालनों में डेटा प्रकार रैंक?

  3. उदाहरण पर हमेशा उपलब्धता समूह में SQL सर्वर में पारदर्शी डेटा एन्क्रिप्शन (TDE)

  4. SQL एजेंट सेवा का सेवा खाता विवरण प्राप्त करें

  5. SQL सर्वर Oracle के क्रिएट या रिप्लेस व्यू के बराबर है