一 like語句
%xxx%:查詢username字段中包含xxx的記錄。
select * from user where username like '%xxx%';
%xxx:查詢username字段中以xxx結尾的記錄。
select * from user where username like '%xxx';
xxx%:查詢username字段中以xxx開頭的記錄。
select * from user where username like 'xxx%';
二 like語句是否使用索引?
使用explain關鍵字分析上述like查詢,發現有些情況使用索引,有些情況下全表查詢。
like %xxx%:全表掃描,未使用索引,效率低。
like %xxx:全表掃描,未使用索引,效率低。
like xxx%:使用了username字段的索引。
三 優化like?
網上有一些關於like %xxx%的優化建議,比如 locate, instr, position的方式,但是親測之后發現這幾個方式也是全表掃描。如果數據量龐大的話,還是建議直接使用搜索引擎elasticsearch。