2015-04-18 66 views
-4

使用LIKE子句的優勢,我想知道哪一個會是在我的字典裏尋找更好:什麼是我想創造一個詞典網站,在MySQL

SELECT col FROM table WHERE col='anything' 

OR

SELECT col FROM table WHERE col LIKE '%anything%' 

哪一個有更快的速度和性能? (僅適用於正好匹配字) TNX

+0

它放在你希望你的搜索功能需要的工作取決於? –

+0

第一個會更快,但它不會這樣做。 '%anything%'會找到任何包含'%anything%'的東西,而'anything'只會找到完全匹配。 – Jite

+0

我有一個英文單詞列表,我希望在它們中搜索,你推薦什麼? – Shafizadeh

回答

0

如果列col是指數,然後用第一個查詢將使用索引

SELECT col FROM table WHERE col='anything' 

而且,即使列col被索引優化將第2個的情況下無法使用索引。

所以第一個查詢在性能上會更好。

簽出更多的關於查詢優化的

https://dev.mysql.com/doc/refman/5.5/en/optimization-indexes.html

+0

我問了一個關於[在存在'union all'時排序查詢結果]和*(我認爲)*的問題,你爲我寫了一個答案。 (我用另一個帳戶問了這個問題,現在這個帳戶被刪除了)。所以我找不到你的答案,你能找到它嗎? (我也記得你在解決方案中使用了@變量)tnx – Shafizadeh

+1

哎喲我真的找不到那個!由於我給出了很多涉及使用mysql變量的答案。 –

+0

好吧,我在[這裏]再次問這個問題(http://stackoverflow.com/questions/33166093/how-to-sort-the-result-of-multiple-queries-alternatively),如果你有空閒時間,請看看它,因爲我只需要你已經給我的那個答案。 – Shafizadeh

0

當比較,無論是等於將執行大約相同。

等於如果所評估的列是索引的,則性能會更好。

LIKE會給你更多的功能:'%','_'等,這將允許你執行更廣泛的查詢。更多信息請參見http://www.w3schools.com/sql/sql_like.aspLIKE

+0

ahan,我只想要完全匹配單詞!!!你推薦我使用等於? – Shafizadeh

+0

是的。如果這是一個常見的查詢,您應該考慮索引該列,就像Abhik Chakraborty所說 – Josi

0

SELECT col FROM table WHERE col='anything'SELECT col FROM table WHERE col LIKE '%anything%'將返回幾乎相同的答案,

SELECT col FROM table WHERE col LIKE 'anything%'這將返回末用繩子什麼

SELECT col FROM table WHERE col LIKE '%anything'這將返回字符串啓動任何東西

0

完全匹配的話(因爲你是一個字典),你應該使用第一個兩個查詢:

SELECT col FROM table WHERE col='anything' 

其他查詢將匹配任何包含字符串「什麼」。這將包括'fooanything'(不是一個詞)和'foo any bar'。這可能是你不想要的。

因此,要回答你的問題:

什麼是MySQL中使用LIKE子句的優勢在哪裏?

它具有能夠匹配其包含一個字符串的項目優勢,但在您的使用情況(字典)它沒有優勢任何,當你只想要一個會INFACT返回幾場比賽。

例如:假設你正在尋找了術語「任意」 ...

SELECT col FROM table WHERE col LIKE '%any%' 

該查詢將返回:「任何」,「多」,「反正」,「什麼」,等等。 ..

0

等於(=)運算符是「比較運算符比較兩個值是否相等」。換句話說,在SQL語句中,除非方程的兩個值相等,否則它不回答真。例如, SELECT * FROM student WHERE roll = 10;

它將返回值僅當輥的值等於10。

凡爲LIKE運算「實現了模式匹配的比較」試圖匹配「對含圖案串野生一個字符串值卡字符「。例如, SELECT * FROM student WHERE name LIKE「%vat」;

它將返回名稱列值以字符串「vat」結尾的所有行。

SELECT * FROM student WHERE name like「Pra%」; 它將返回名稱列值以字符串「Pra」開頭的所有行。

SELECT * FROM student WHERE name LIKE「%va%」; 它將返回名稱列值爲字符串「Pra」的所有行。

NB:

1) When you know the exact value to comapre with the coloumn you may use =(equal) operator for Exact/Accurate Result. 
    When you dont know the Compared value but you are able to remember part of the string or value you may use "LIKE" operator. 

2) Equal(=), Comaprision Operator can be used in Integer/Float (Numeric) along with varchar/varchar2/text (String) but the Like Operatpor can be used only for varchar/varchar2/Text (String). 
相關問題