MySQL優化之like關鍵字

1.%號不放最左邊

沒法使用索引了,開頭是不肯定的,MySQL也沒法進行優化了,只能掃描表了。php

2.使用覆蓋索引

若是業務須要%就放開頭咱們也沒辦法,通常狀況需求都是這樣的,畢竟優化仍是爲業務服務的。mysql

建立複合索引idx_name_agesql

select name,age from tb where name like '%e%';函數

 

查詢是覆蓋索引的,起碼比全表掃描要好。優化

若是須要更多字段的數據而不僅僅是age的話,能夠進行兩次查詢,第一次經過name來獲取id(這一步是索引掃描),第二步拿獲取來的數據在進行id匹配查詢(這一步效率很高,ref或者const)。spa

 

LIKE語句
SELECT `column` FROM `table` where `condition` like `%keyword%'

事實上,可使用 locate(position) 和 instr 這兩個函數來代替
.net

1、LOCATE語句
SELECT `column` from `table` where locate(‘keyword’, `condition`)>0

2、或是 locate 的別名 position
POSITION語句
SELECT `column` from `table` where position(‘keyword’ IN `condition`)

3、INSTR語句
SELECT `column` from `table` where instr(`condition`, ‘keyword’ )>0

locate、position 和 instr 的差別只是參數的位置不一樣,同時locate 多一個起始位置的參數外,二者是同樣的。
mysql> SELECT LOCATE(‘bar’, ‘foobarbar’,5);
---------------------
做者:wpfphp
來源:CSDN
原文:https://blog.csdn.net/wpfphp/article/details/52584232
版權聲明:本文爲博主原創文章,轉載請附上博文連接!blog

相關文章
相關標籤/搜索