Gunakan '=' atau LIKE untuk membandingkan string dalam SQL?


169

Ada diskusi (hampir religius), jika Anda harus menggunakan LIKE atau '=' untuk membandingkan string dalam pernyataan SQL.

  • Apakah ada alasan untuk menggunakan LIKE?
  • Apakah ada alasan untuk menggunakan '='?
  • Performa? Keterbacaan?

Jawaban:


126

Untuk melihat perbedaan kinerja, coba ini:

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

Membandingkan string dengan '=' jauh lebih cepat.


5
Aduh ... oke, saya ambil intinya. Tabel dengan ~ 600 entri, 10 digit angka sebagai bidang pembanding: Sama dengan 20 hingga 30 kali lebih cepat!
guerda

194

LIKEdan operator kesetaraan memiliki tujuan yang berbeda, mereka tidak melakukan hal yang sama:
=jauh lebih cepat, sedangkan LIKEdapat mengartikan wildcard. Gunakan di =mana pun Anda bisa dan di LIKEmana pun Anda harus.

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

Pertandingan sampel:

TestUser1
TestUser2
TestU
Test


37

Dalam pengalaman kecil saya:

"=" untuk Pencocokan Tepat.

"LIKE" untuk Pertandingan Parsial.


5
= tidak peka huruf besar-kecil
fanchyna

14

Ada beberapa trik lain yang ditawarkan Postgres untuk pencocokan string (jika itu adalah DB Anda):

ILIKE, yang merupakan kasus SEPERTI pertandingan yang tidak sensitif:

select * from people where name ilike 'JOHN'

Cocok:

  • John
  • john
  • JOHN

Dan jika Anda ingin benar-benar marah, Anda dapat menggunakan ekspresi reguler:

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

Cocok:

  • John
  • Johnathon
  • Johnny

1
Sejauh yang saya sadar ekspresi reguler dan seperti kata kunci memiliki kinerja yang lebih buruk daripada '='
Ceilingfish

Typo 'ilike' to 'like'
Salah Alshaal

9

Sama seperti kepala, operator '=' akan menambahkan string dengan spasi di Transact-SQL. Jadi 'abc' = 'abc 'akan kembali benar; 'abc' LIKE 'abc 'akan kembali salah. Dalam kebanyakan kasus '=' akan benar, tetapi dalam kasus saya baru-baru ini tidak.

Jadi sementara '=' lebih cepat, LIKE mungkin secara lebih eksplisit menyatakan niat Anda.

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


7

Untuk pencocokan pola, gunakan LIKE. Untuk pencocokan tepat =.


6

LIKEdigunakan untuk pencocokan pola dan =digunakan untuk uji kesetaraan (seperti yang didefinisikan oleh yang COLLATIONdigunakan).

=dapat menggunakan indeks sementara LIKEkueri biasanya memerlukan pengujian setiap rekaman tunggal dalam hasil yang ditetapkan untuk memfilternya (kecuali jika Anda menggunakan pencarian teks lengkap) sehingga =memiliki kinerja yang lebih baik.


4

SUKA tidak cocok dengan karakter wildcard [*,?] Di shell
LIKE '% suffix' - beri saya semua yang berakhiran akhiran. Anda tidak bisa melakukannya dengan =
Tergantung pada case sebenarnya.


3

Ada alasan lain untuk menggunakan "suka" walaupun kinerjanya lebih lambat: Nilai karakter secara implisit dikonversi menjadi bilangan bulat jika dibandingkan, jadi:

declare @transid varchar (15)

if @transid! = 0

akan memberi Anda kesalahan "Konversi nilai varchar '123456789012345' meluap kolom int".

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.