Sử dụng '=' hoặc THÍCH để so sánh các chuỗi trong SQL?


169

Có cuộc thảo luận (gần như tôn giáo), nếu bạn nên sử dụng THÍCH hoặc '=' để so sánh các chuỗi trong các câu lệnh SQL.

  • Có lý do để sử dụng THÍCH?
  • Có lý do để sử dụng '=' không?
  • Hiệu suất? Dễ đọc?

Câu trả lời:


126

Để 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.


5
Ái chà ... được rồi, tôi đã lấy điểm. Bảng có ~ 600 mục, số 10 chữ số làm trường so sánh: Bằng nhanh hơn 20 đến 30 lần!
guerda

194

LIKEvà 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 LIKEcó 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à LIKEbấ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


37

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.


5
= không phân biệt chữ hoa chữ thường
fanchyna

14

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:

  • John
  • John
  • JOHN

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:

  • John
  • Johnathon
  • Johnny

1
Theo như tôi biết thì biểu thức chính quy và các từ khóa giống như có hiệu suất kém hơn '='
Cá trần

Typo 'ilike' thành 'like'
Salah Alshaal

9

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.

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


7

Đối với mô hình phù hợp sử dụng THÍCH. Đối với trận đấu chính xác =.


6

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 COLLATIONsử dụng).

=có thể sử dụng các chỉ mục trong khi LIKEcá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.


4

THÍCH không khớp như ký tự đại diện char [* ,?] Ở vỏ
THÍCH '% hậu tố' - cho tôi mọi thứ kết thúc bằng hậu tố. Bạn không thể làm điều đó với =
Phụ thuộc vào trường hợp thực sự.


3

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".

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.