Câu trả lời:
Để xem sự khác biệt hiệu suất, hãy thử điều này:
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
So sánh chuỗi với '=' nhanh hơn nhiều.
LIKE
và toán tử đẳng thức có các mục đích khác nhau, chúng không làm cùng một điều:
=
nhanh hơn nhiều, trong khi LIKE
có thể diễn giải các ký tự đại diện. Sử dụng =
bất cứ nơi nào bạn có thể và LIKE
bất cứ nơi nào bạn phải.
SELECT * FROM user WHERE login LIKE 'Test%';
Các trận đấu mẫu:
TestUser1
TestUser2
TestU
thử nghiệm
Theo kinh nghiệm nhỏ của tôi:
"=" cho các trận đấu chính xác.
"THÍCH" cho các trận đấu một phần.
Có một vài thủ thuật khác mà Postgres đưa ra để khớp chuỗi (nếu đó là DB của bạn):
ILIKE, một trường hợp THÍCH không nhạy cảm:
select * from people where name ilike 'JOHN'
Diêm:
Và nếu bạn muốn nổi điên, bạn có thể sử dụng các biểu thức thông thường:
select * from people where name ~ 'John.*'
Diêm:
Chỉ cần ngẩng cao đầu, toán tử '=' sẽ đệm các chuỗi có khoảng trắng trong Transact-SQL. Như vậy 'abc' = 'abc '
sẽ trở về đúng; 'abc' LIKE 'abc '
sẽ trả lại sai. Trong hầu hết các trường hợp '=' sẽ đúng, nhưng trong trường hợp gần đây của tôi thì không.
Vì vậy, trong khi '=' nhanh hơn, THÍCH có thể nói rõ hơn ý định của bạn.
LIKE
được sử dụng để khớp mẫu và =
được sử dụng để kiểm tra đẳng thức (như được xác định bởi việc COLLATION
sử dụng).
=
có thể sử dụng các chỉ mục trong khi LIKE
các truy vấn thường yêu cầu kiểm tra từng bản ghi trong tập kết quả để lọc ra (trừ khi bạn đang sử dụng tìm kiếm toàn văn) để =
có hiệu suất tốt hơn.
Có một lý do khác để sử dụng "like" ngay cả khi hiệu suất chậm hơn: Các giá trị ký tự được chuyển đổi hoàn toàn thành số nguyên khi so sánh, vì vậy:
khai báo @transid varchar (15)
nếu @transid! = 0
sẽ cung cấp cho bạn lỗi "Việc chuyển đổi giá trị varchar '123456789012345' tràn một cột int".