Jawaban:
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.
LIKE
dan operator kesetaraan memiliki tujuan yang berbeda, mereka tidak melakukan hal yang sama:
=
jauh lebih cepat, sedangkan LIKE
dapat mengartikan wildcard. Gunakan di =
mana pun Anda bisa dan di LIKE
mana pun Anda harus.
SELECT * FROM user WHERE login LIKE 'Test%';
Pertandingan sampel:
TestUser1
TestUser2
TestU
Test
Dalam pengalaman kecil saya:
"=" untuk Pencocokan Tepat.
"LIKE" untuk Pertandingan Parsial.
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:
Dan jika Anda ingin benar-benar marah, Anda dapat menggunakan ekspresi reguler:
select * from people where name ~ 'John.*'
Cocok:
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.
LIKE
digunakan untuk pencocokan pola dan =
digunakan untuk uji kesetaraan (seperti yang didefinisikan oleh yang COLLATION
digunakan).
=
dapat menggunakan indeks sementara LIKE
kueri 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.
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".