日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

谈谈mysql locate函数

發布時間:2024/3/12 数据库 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 谈谈mysql locate函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

大家都知道,當我們mysql需要使用模糊查詢的時候,往往會使用like去做相關查詢條件的模糊匹配,但是很多場景下,使用locate會獲取同樣的效果

create table user(id int primary key auto_increment,name varchar(18),description varchar(255) ) charset=UTF8;select * from user order by id;


測試環境插入如上數據:
場景1,我么需要查詢所有名字中含有 王 的所有數據,用like很簡單

select * from user where name like '%王%' order by id;

那么使用locate如何去實現呢,首先我們先看看locate的用法,如下為官方給出的該函數的詳細使用說明

意思也比較簡單

LOCATE(substr,str) LOCATE(substr,str,pos)

1,從str的起始位置開始匹配str中的substr串,如果匹配上,返回下標,如果沒有匹配上,返回0,如果substr或者str為null的時候,返回null
2,表示從下標為pos(int值)處開始匹配

使用locate實現上述效果:

select * from user where locate('王',name)

但是如果我現在需求是找出所有名字中含有王,但是不姓王的人找出來,使用like就不太好實現了,但是使用locate就很容易實現,我們用下面那種實現方式如下

select * from user where locate('王',name,2)


我們從第2個字符串開始匹配,就很把所有姓王的給過濾掉了

關于locate的用法如上,結合具體的業務,配合合理的數據庫設計,可以很容易避開復雜的like查詢。

問題:但是有一種說法是在同樣數據量情況下,使用locate查詢比使用like效率要高,但是查看語句的執行計劃,二者是一模一樣的,不明白是為什么,官方也沒找到相關說明,還望知道的大神可以留言一起交流一波!

總結

以上是生活随笔為你收集整理的谈谈mysql locate函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。