Yanıtlar:
Performans farkını görmek için şunu deneyin:
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
Dizeleri '=' ile karşılaştırmak çok daha hızlıdır.
LIKE
ve eşitlik operatörünün farklı amaçları vardır, aynı şeyi yapmazlar:
=
çok daha hızlıdır, oysa LIKE
joker karakterleri yorumlayabilir. Mümkün olan =
her yerde ve LIKE
gerektiğinde kullanın.
SELECT * FROM user WHERE login LIKE 'Test%';
Örnek eşleşmeler:
TestUser1
TestUser2
TestU
Testi
Benim küçük deneyimime göre:
Tam Eşleşmeler için "=".
Kısmi Eşleşmeler için "GİBİ".
Postgres'in dize eşleşmesi için sunduğu birkaç başka numara var (eğer DB'niz bu ise):
Büyük / küçük harfe duyarlı olmayan bir LIKE eşleşmesi olan ILIKE:
select * from people where name ilike 'JOHN'
Maçlar:
Ve eğer gerçekten kızmak istiyorsanız düzenli ifadeler kullanabilirsiniz:
select * from people where name ~ 'John.*'
Maçlar:
Tıpkı bir uyarı gibi, '=' operatörü, Transact-SQL'de boşluklu dizeleri doldurur. Böylece 'abc' = 'abc '
doğru dönecektir; 'abc' LIKE 'abc '
yanlış döndürür. Çoğu durumda '=' doğru olacaktır, ancak son zamanlarda yaptığım bir durum doğru değildi.
Dolayısıyla '=' daha hızlı olsa da, LIKE niyetlerinizi daha açık bir şekilde ifade edebilir.
LIKE
örüntü eşleştirme =
için kullanılır ve eşitlik testi için kullanılır ( COLLATION
kullanımda tanımlandığı gibi ).
=
ise endeksler kullanabilirsiniz LIKE
sorguları genellikle (tam metin araması kullanmıyorsanız) öyle filtrelemek için sonuç kümesindeki her bir kaydı test gerektiren =
daha iyi performansa sahiptir.
Performans daha yavaş olsa bile "like" kullanmanın başka bir nedeni daha vardır: Karakter değerleri karşılaştırıldığında örtük olarak tamsayıya dönüştürülür, bu nedenle:
@transid varchar (15) tarafından beyan edildi
eğer @transid! = 0
"varchar değerinin" 123456789012345 "dönüşümü int sütunundan taştı" hatası verir.