এসকিউএলটিতে স্ট্রিংগুলির তুলনা করতে '=' বা লাইক ব্যবহার করুন?


169

(প্রায় ধর্মীয়) আলোচনা আছে, যদি আপনার এসকিউএল স্টেটমেন্টগুলিতে স্ট্রিংগুলির তুলনা করতে LIKE বা '=' ব্যবহার করা উচিত।

  • লাইক ব্যবহারের কি কারণ আছে?
  • '=' ব্যবহার করার কি কারণ আছে?
  • কর্মক্ষমতা? পঠনযোগ্যতার?

উত্তর:


126

পারফরম্যান্স পার্থক্য দেখতে, এটি চেষ্টা করুন:

SELECT count(*)
FROM master..sysobjects as A
JOIN tempdb..sysobjects as B
on A.name = B.name

SELECT count(*)
FROM master..sysobjects as A
JOIN tempdb..sysobjects as B
on A.name LIKE B.name

'=' এর সাথে স্ট্রিংগুলির তুলনা করা আরও দ্রুত।


5
ওফস ... ঠিক আছে, আমি কথাটি নিয়েছি। ক্ষেত্র হিসাবে তুলনা ক্ষেত্র হিসাবে as 600 এন্ট্রি, 10 ডিজিট সংখ্যা সহ সারণী: সমান 20 থেকে 30 গুণ দ্রুত!
গেরদা

194

LIKEএবং সাম্যতা অপারেটরের বিভিন্ন উদ্দেশ্য রয়েছে, তারা একই কাজ করে না:
=অনেক দ্রুত, যেখানে LIKEওয়াইল্ডকার্ডের ব্যাখ্যা দিতে পারে। =আপনি যেখানেই পারেন এবং LIKEযেখানেই প্রয়োজন সেখানে ব্যবহার করুন ।

SELECT * FROM user WHERE login LIKE 'Test%';

নমুনা ম্যাচ:

TestUser1
TestUser2
টেস্টইউ
পরীক্ষা



14

পোস্টগ্রিস স্ট্রিং ম্যাচিংয়ের জন্য অফার করে এমন আরও কয়েকটি কৌশল রয়েছে (যদি তা আপনার ডিবি হয়ে থাকে):

আইলিকে, এটি একটি সংবেদনশীল মত লাইক ম্যাচ:

select * from people where name ilike 'JOHN'

মিলগুলি:

  • জন
  • জন
  • যোহন

এবং আপনি যদি সত্যিই পাগল হতে চান তবে আপনি নিয়মিত প্রকাশ করতে পারেন:

select * from people where name ~ 'John.*'

মিলগুলি:

  • জন
  • Johnathon
  • জনি

1
যতদূর আমি অবগত আছি নিয়মিত প্রকাশ এবং
মতামতগুলির মতো

টাইপ করুন 'ইলিকে' থেকে 'লাইক'
সালাহ আলশাল

9

ঠিক যেমন মাথা উপরে উঠছে, '=' অপারেটর ট্রানজ্যাক্ট-এসকিউএল-এর ফাঁক দিয়ে স্ট্রিংগুলি প্যাড করবে। সুতরাং 'abc' = 'abc 'সত্য ফিরে আসবে; 'abc' LIKE 'abc 'মিথ্যা ফিরে আসবে। বেশিরভাগ ক্ষেত্রে '=' সঠিক হবে, তবে সাম্প্রতিক ক্ষেত্রে আমার ক্ষেত্রে তা ছিল না।

সুতরাং যখন '=' দ্রুত, LIKE আরও স্পষ্টভাবে আপনার উদ্দেশ্যগুলি বর্ণনা করতে পারে।

http://support.microsoft.com/kb/316626


7

প্যাটার্ন মিলের জন্য লাইক ব্যবহার করুন। সঠিক ম্যাচের জন্য =।


6

LIKEপ্যাটার্ন মিলের =জন্য ব্যবহৃত হয় এবং সমতা পরীক্ষার জন্য ব্যবহৃত হয় (যেমন COLLATIONব্যবহারের দ্বারা সংজ্ঞায়িত )।

=সূচকগুলি ব্যবহার করতে পারেন যখন LIKEক্যোয়ারীগুলিকে প্রায়শই প্রতিটি ফলাফল রেকর্ড করে ফলাফল নির্ধারণের জন্য পরীক্ষার প্রয়োজন হয় (যদি আপনি সম্পূর্ণ পাঠ্য অনুসন্ধান না করে থাকেন) তবে =আরও ভাল পারফরম্যান্স রয়েছে।


4

শেলটিতে ওয়াইল্ডকার্ড চর [*,?] এর মতো মিলেছে যেমন পছন্দ করে
'% প্রত্যয়' - প্রত্যয় দিয়ে শেষ হওয়া সবকিছু আমাকে দিন। আপনি
আসলে এটি কেসের উপর নির্ভর করে = করতে পারেন নি ।


3

পারফরম্যান্সটি ধীর হলেও এমনকি "লাইক" ব্যবহারের আরও একটি কারণ রয়েছে: তুলনা করার সময় চরিত্রের মানগুলি সুস্পষ্টভাবে পূর্ণসংখ্যায় রূপান্তরিত হয়, সুতরাং:

@ ট্রান্সসিড ভারচার ঘোষণা করুন (15)

যদি @ ট্রান্সসিড! = 0

আপনাকে "বার্কার মান '123456789012345' রূপান্তরটি একটি ইন কলামে ভেসে গেছে" ত্রুটি দেবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.