Trong một DBMS khá, động cơ DB sẽ nhận ra rằng không có ký tự đại diện trong chuỗi và ngầm biến nó thành một sự bình đẳng thuần túy (không nhất thiết giống như =
). Do đó, bạn chỉ nhận được một hiệu suất nhỏ khi bắt đầu, thường không đáng kể cho bất kỳ truy vấn có kích thước nào.
Tuy nhiên, toán tử MySQL =
không nhất thiết phải hành động theo cách bạn mong đợi (như kiểm tra bình đẳng thuần túy). Cụ thể, nó không theo mặc định đưa vào không gian tài khoản trailing cho CHAR
và VARCHAR
dữ liệu, có nghĩa là:
SELECT age WHERE name = 'pax'
sẽ cung cấp cho bạn hàng cho 'pax'
, 'pax<one space>'
và'pax<a hundred spaces>'
.
Nếu bạn muốn làm một hợp kiểm tra bình đẳng, bạn sử dụng binary
keyword:
SELECT field WHERE name = binary 'pax'
Bạn có thể kiểm tra điều này với một cái gì đó như:
mysql> create table people (name varchar(10));
mysql> insert into people value ('pax');
mysql> insert into people value ('pax ');
mysql> insert into people value ('pax ');
mysql> insert into people value ('pax ');
mysql> insert into people value ('notpax');
mysql> select count(*) from people where name like 'pax';
1
mysql> select count(*) from people where name = 'pax';
4
mysql> select count(*) from people where name = binary 'pax';
1
Baring một hoàn toàn braindead thực hiện, chi phí của một trong hai hương vị của chuỗi so sánh sẽ được dwarfed bởi chi phí di chuyển dữ liệu ra khỏi đĩa. Viết ra những gì bạn thực sự có ý nghĩa và tiếp tục với lập trình. –
Điều này trước đây đã được đề cập [ở đây] (http://stackoverflow.com/questions/543580/equals-vs-like) trên stackoverflow. Tôi hi vọng cái này giúp được. – user34867
Cảm ơn, tôi đã tìm kiếm điều này trước khi đăng nhưng không thấy bằng cách nào đó. – mluebke