دستور Like سریعتر است یا Contains ؟ به زبان ساده

در ابتدا تعریف از این دو عبارت می کنیم .

دوره های شبکه، برنامه نویسی، مجازی سازی، امنیت، نفوذ و ... با برترین های ایران
  •  Like: همانطور که از معنی این عبارت مشخص هست تعیین می کند کدام رشته های کارکتر منطبق با یک عبارت مشخص می باشند. مثلا:
Select * from table where column Like N'%test%'

که نتیجه این کوئری پیدا نمودن سطرهایی هست که در ستون مد نظر الگو

N'%test%'

را دارا می باشند.

  • Contains: در حقیقت یک تابع می باشد که همانند عبارت Like به جستجو می پردازد.مثلا:
SELECT * FROM table WHERE CONTAINS(Column, '%test%')

اما نکته ای که در اینجا هست این می باشد. کدام یک سریعتر می باشند؟ و زودتر جواب را برمی گرداند؟ خب اختلاف این دو عبارت یعنی like و Contains زمانی رخ می دهد که بر روی آن ستون مورد جستجو ایندکس گذاری شود. یا بهتر بگم بر روی اون ستون یک FullTextIndex ( این نوع از ایندکس ها را بر روی ستون ها دارای نوع داده ای بزرگ Blob مثل (nvarchar(max یا فایل های تصویری اعمال می شود.) قرار گیرد. در این حالت تمایز اساسی در سرعت ایجاد خواهد شد و با تابع Contains می توان عبارت مد نظر را سریعتر یافت به نسبت Like.حال دو کوئری را اجرا می کنیم . کوئری که با کلمه کلیدی Like بود یک clustered index scan انجام می کند و کوئری که با Contains بود علاوه بر Clustered index scan ، عملیات های اضافه ای برای تطبیق کامل متن و یک merge join انجام می دهد.

Like vs contains

امیدوارم این نکته برای شما مفید واقع شده باشد.


بابک رستمی
بابک رستمی

Babak Rostami Senior computer software expert. C# Programming, Asp.Net, SQL Server,SEO ( Search Engine Optimization)

نظرات