নিম্নলিখিত প্রশ্নের মধ্যে কোনটি দ্রুত (LIKE বনাম কন্টেইনস) দ্রুত?
SELECT * FROM table WHERE Column LIKE '%test%';
অথবা
SELECT * FROM table WHERE Contains(Column, "test");
নিম্নলিখিত প্রশ্নের মধ্যে কোনটি দ্রুত (LIKE বনাম কন্টেইনস) দ্রুত?
SELECT * FROM table WHERE Column LIKE '%test%';
অথবা
SELECT * FROM table WHERE Contains(Column, "test");
উত্তর:
দ্বিতীয়টি (আপনার মানে ধরে নিচ্ছেন CONTAINS
এবং প্রকৃতপক্ষে এটি একটি বৈধ ক্যোয়ারিতে রেখেছেন) দ্রুত হওয়া উচিত, কারণ এটি সূচকের কিছু ফর্ম ব্যবহার করতে পারে (এই ক্ষেত্রে, একটি সম্পূর্ণ পাঠ্য সূচক)। অবশ্যই, ক্যোয়ারী এই ফর্মটি শুধুমাত্র উপলব্ধ হলে কলামটি একটি সম্পূর্ণ টেক্সট সূচক হয়। যদি তা না হয় তবে কেবলমাত্র প্রথম ফর্মটি উপলব্ধ।
প্রথম ক্যোয়ারী, LIKE ব্যবহার করে একটি সূচক ব্যবহার করতে অক্ষম হবে, যেহেতু এটি একটি ওয়াইল্ডকার্ড দিয়ে শুরু হয়, তাই সর্বদা একটি পূর্ণ টেবিল স্ক্যানের প্রয়োজন হবে।
CONTAINS
ক্যোয়ারী হওয়া উচিত:
SELECT * FROM table WHERE CONTAINS(Column, 'test');
CONTAINS
? এটা কি? প্রশ্নের মূল ফর্মটি Column CONTAIN("%test%",Column)>0
যা বৈধের কাছাকাছি ছিল না। এটি এখনও পুরোপুরি ঠিক নয়।
একটি এসকিউএল সার্ভার 2012 উদাহরণে উভয় প্রশ্ন চালানো, আমি নিশ্চিত করতে পারি যে প্রথম ক্যোয়ারী আমার ক্ষেত্রে সবচেয়ে দ্রুত ছিল।
LIKE
কীওয়ার্ড সহ ক্যোয়ারিতে একটি ক্লাস্টারড ইনডেক্স স্ক্যান দেখানো হয়েছিল।
CONTAINS
এছাড়াও সম্পূর্ণ টেক্সট ম্যাচের জন্য অতিরিক্ত অপারেটরদের সঙ্গে ক্লাস্টার সূচক স্ক্যান ছিল এবং মার্জ যোগদান করুন।
LIKE
একটি নেতৃস্থানীয় ওয়াইল্ডকার্ড সঙ্গে ক্যোয়ারী দক্ষতার সূচক অংশ ব্যবহার করতে পারবেন না। এটি কেবল পুরো জিনিসটি স্ক্যান করতে হবে। নিঃসন্দেহে এমন কিছু পরিস্থিতি থাকতে পারে যেখানে সম্পূর্ণ সিআই স্ক্যান পুরো পাঠ্য সূচকটি ব্যবহার করে কোয়েরির চেয়ে আরও ভাল পারফর্ম করে (সম্ভবত উদাহরণস্বরূপ সারিগুলির একটি খুব বেশি অনুপাত মেলে তবে) এটি ব্যতিক্রম কিছু সাধারণ নিয়ম নয় যা আপনি "নিশ্চিত করতে পারেন" "।
LIKE
।
আমি মনে করি এটি CONTAINS
বেশি সময় নিয়েছে এবং ব্যবহৃত হয়েছে Merge
কারণ আপনার ক্যোয়ারীতে আপনার একটি ড্যাশ ছিল ("-") adventure-works.com
।
ড্যাশ একটি বিরতি শব্দ তাই CONTAINS
অনুসন্ধানের জন্য পূর্ণ-পাঠ্য সূচকটি অনুসন্ধান করে adventure
এবং এর চেয়ে এটি অনুসন্ধান করে works.com
এবং ফলাফলগুলিকে মার্জ করে।
এ থেকে পরিবর্তন করার চেষ্টা করুন:
SELECT * FROM table WHERE Contains(Column, "test") > 0;
এটি:
SELECT * FROM table WHERE Contains(Column, '"*test*"') > 0;
প্রাক্তন " এটি একটি পরীক্ষা " এবং " একটি টেস্ট-কেস পরিকল্পনা হ'ল " এর মতো মান সহ রেকর্ডগুলি সন্ধান করবে ।
পরবর্তীকালে " আমি এটি পরীক্ষা করছি " এবং " এটি সর্বশ্রেষ্ঠ " এর মতো মান সহ রেকর্ডগুলিও সন্ধান করবে ।
CONTAINS
, এটি কেবল 'টেস্ট *' এর মতো উপসর্গ শর্তাদি ব্যবহার করে, ' পরীক্ষার' মতো প্রত্যয় পদ ব্যবহার করে না এবং '* পরীক্ষা ' এর মতো পুরো সাবস্ট্রিং অনুসন্ধান করে না । যদিও আমি চেষ্টা করে দেখিনি।