首先,我承認兩者之間的區別:
- 就像使可用通配符%和_
- 顯著尾隨空白
- colation發出使用像主場迎戰=爲精確字符串匹配
所有其他條件不變,一個精確的字符串匹配這是更有效的:
SELECT field WHERE 'a' = 'a';
或者:
SELECT field WHERE 'a' LIKE 'a';
或者:差異是否微不足道,無關緊要?
首先,我承認兩者之間的區別:
- 就像使可用通配符%和_
- 顯著尾隨空白
- colation發出使用像主場迎戰=爲精確字符串匹配
所有其他條件不變,一個精確的字符串匹配這是更有效的:
SELECT field WHERE 'a' = 'a';
或者:
SELECT field WHERE 'a' LIKE 'a';
或者:差異是否微不足道,無關緊要?
我會說=比較器會更快。詞法不會將比較發送到另一個詞彙系統來進行一般匹配。相反,引擎能夠匹配或繼續前進。我們的db在工作中有數百萬行,並且=總是更快。
在一個體面的DBMS中,數據庫引擎會識別字符串中沒有通配符,並將其隱式轉換爲純粹的相等(不一定與=
相同)。所以,你在開始時只會遇到小的性能問題,通常對於任何像樣大小的查詢都可以忽略不計。
但是,MySQL =
運算符不一定按照您期望的方式運行(作爲純粹的相等性檢查)。具體來說,它默認情況下不考慮尾部的空格爲CHAR
和VARCHAR
數據,這意味着:
SELECT age WHERE name = 'pax'
會給你行的'pax'
,'pax<one space>'
和'pax<a hundred spaces>'
。
如果你想要做一個適當平等檢查,使用binary
關鍵字:
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
霸菱一個完全新空房禁地:
你可以像測試此實施中,字符串比較風格的代價將被數據從磁盤移出的代價所壓倒。寫出你真正的意思,並繼續編程。 – 2009-02-18 01:49:18
這已經在stackoverflow上覆蓋了[here](http://stackoverflow.com/questions/543580/equals-vs-like)。我希望這有幫助。 – user34867 2009-02-18 01:36:14