Mysql模糊查詢like效率,以及更高效的寫法

2021-08-29 05:36:10 字數 1477 閱讀 4826

在使用msyql進行模糊查詢的時候,很自然的會用到like語句,通常情況下,在資料量小的時候,不容易看出查詢的效率,但在資料量達到百萬級,千萬級的時候,查詢的效率就很容易顯現出來。這個時候查詢的效率就顯得很重要!

一般情況下like模糊查詢的寫法為(field已建立索引):

select `column` from `table` where `field` like '%keyword%';
上面的語句用explain解釋來看,sql語句並未用到索引,而且是全表搜尋,如果在資料量超大的時候,可想而知最後的效率會是這樣

對比下面的寫法:

select `column` from `table` where `field` like 'keyword%';
這樣的寫法用explain解釋看到,sql語句使用了索引,搜尋的效率大大的提高了!

這個時候,我們可以考慮用其他的方法

1.locate(『substr』,str,pos)方法

select locate('xbar',`foobar`); 

###返回0

select locate('bar',`foobarbar`);

###返回4

select locate('bar',`foobarbar`,5);

###返回7

備註:返回 substr 在 str 中第一次出現的位置,如果 substr 在 str 中不存在,返回值為 0 。如果pos存在,返回 substr 在 str 第pos個位置後第一次出現的位置,如果 substr 在 str 中不存在,返回值為0。

select `column` from `table` where locate('keyword', `field`)>0
備註:keyword是要搜尋的內容,field為被匹配的字段,查詢出所有存在keyword的資料

2.position(『substr』 infield)方法

position可以看做是locate的別名,功能跟locate一樣

select `column` from `table` where position('keyword' in `filed`)
3.instr(str,『substr』)方法

select `column` from `table` where instr(`field`, 'keyword' )>0
除了上述的方法外,還有乙個函式find_in_set

find_in_set(str1,str2):

返回str2中str1所在的位置索引,其中str2必須以","分割開。

Mysql模糊查詢like效率,以及更高效的寫法

在使用msyql進行模糊查詢的時候,很自然的會用到like語句,通常情況下,在資料量小的時候,不容易看出查詢的效率,但在資料量達到百萬級,千萬級的時候,查詢的效率就很容易顯現出來。這個時候查詢的效率就顯得很重要!一般情況下like模糊查詢的寫法為 field已建立索引 selectcolumnfro...

Mysql模糊查詢like效率,以及更高效的寫法

在使用msyql進行模糊查詢的時候,很自然的會用到like語句,通常情況下,在資料量小的時候,不容易看出查詢的效率,但在資料量達到百萬級,千萬級的時候,查詢的效率就很容易顯現出來。這個時候查詢的效率就顯得很重要!一般情況下like模糊查詢的寫法為 field已建立索引 select column f...

mysql模糊查詢like優化

使用 like value 不走索引 select column from table where field like keyword 1.可使用 like value 前值匹配,可走索引 select column from table where field like keyword 2.使用...