欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

mysql如何讓左模糊查詢也能走索引

 更新時(shí)間:2022年11月21日 17:02:13   作者:紳士jiejie  
這篇文章主要介紹了mysql如何讓左模糊查詢也能走索引,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

讓左模糊查詢也能走索引

測試表USER_INFO表數(shù)據(jù)以及結(jié)構(gòu)如下

有一個(gè)USER_NAME字段的索引

有個(gè)業(yè)務(wù)需求,需要模糊搜索出用戶名后幾位有杰這個(gè)詞的所有用戶信息,這時(shí)候不可能說為了一個(gè)搜索就引入ES,但是如果sql使用左模糊查詢的話,根據(jù)索引的最左匹配原則,該sql語句是不可能使用到idx_user_name索引的,如下:

EXPLAIN SELECT * from USER_INFO where USER_NAME like '%杰'

執(zhí)行計(jì)劃如下:

可以發(fā)現(xiàn)是用不到索引的。

需要做模糊匹配,又要用到索引,索引的最左匹配原則更是不能被打破,這時(shí)候可以增加一個(gè)字段,這個(gè)字段的內(nèi)容等于USER_NAME字段內(nèi)容的反轉(zhuǎn),同時(shí)加上這個(gè)字段的相關(guān)索引,如下:

此時(shí)如果是要模糊搜索出用戶名后幾位有杰這個(gè)詞的所有用戶信息,可以對REVERSE_USER_NAME字段做右模糊查詢,效果其實(shí)就是和對USER_NAME字段做左模糊查詢是一樣的,因?yàn)槎叩膬?nèi)容是相反的,結(jié)果如下:

SELECT * from USER_INFO where REVERSE_USER_NAME like '杰%'

執(zhí)行計(jì)劃如下:

小結(jié)一下:索引的最左匹配原則不能打破,那么要讓左匹配也走索引的話,換個(gè)思路,讓右匹配的效果和左匹配一樣就好了,同時(shí)右匹配又能走索引,間接達(dá)到了左模糊查詢也能走索引的目的。

模糊查詢(like、instr)

SQL中經(jīng)常會遇到模糊查詢,現(xiàn)在模糊查詢正常、最常用的有兩種,一種是like、另一種是instr,這兩種單單是簡單的搜索,instr的效率是比like要高的(這也得看%在哪兒了)。

1. like

like中分右模糊、左模糊,右模糊比如’abc%‘時(shí),掃描索引,高效。當(dāng)模糊查詢含左模糊時(shí),比如’%abc’,進(jìn)行全表掃描,低效。當(dāng)然更別提’%abc%'了。

2. instr

instr(字段名, string),instr的使用也很簡單,就是填寫一下字段名,然后與后面需要查找的內(nèi)容相關(guān)。這個(gè)比like的左模糊效率要高,但是要比右模糊還是相差不多的(因?yàn)樵趇nstr不分左右模糊)。

3. A>=’’ and A<’’

今天在搜索查找之時(shí)還找到了這么一個(gè)查找方法,這個(gè)方法要比上面的instr效率還要高,不過這個(gè)方法局限性還是比較高的。例如:

select * from formtable_main_200_dt1 where hth >= '16040610' and hth < '16040611'

這個(gè)方法只適用于字符型字段,且除了我們想要的字段外,還得加上一個(gè)超過此類型的,并且他只支持右模糊。但是在這幾個(gè)當(dāng)中就右模糊而言,他的效率是最高的。

3的補(bǔ)充講解

在數(shù)據(jù)中進(jìn)行字符的比較時(shí)發(fā)現(xiàn)自己并不是對此了解,這里記下這里字符的比較是比較的哪里。

這里的比較是比較的ASCII,但這不是比較的總的ASCII,而是一個(gè)字符一個(gè)字符的比較,例如我這里有數(shù)據(jù)庫的字段為’123456123’,而要比較的還有’123456223’,這里進(jìn)行比較,當(dāng)?shù)搅?1的1和62的2時(shí)就可以比較出大小了。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • mysql函數(shù)日期和時(shí)間函數(shù)匯總

    mysql函數(shù)日期和時(shí)間函數(shù)匯總

    這篇文章主要介紹了mysql函數(shù)日期和時(shí)間函數(shù)匯總,日期和時(shí)間函數(shù)主要用來處理日期和時(shí)間值,一般的日期函數(shù)除了使用??date???類型的參數(shù)外,也可以使用??datetime???或者??timestamp??類型的參數(shù),但會忽略這些值的時(shí)間部分
    2022-07-07
  • MySQL運(yùn)行報(bào)錯(cuò):“Expression?#1?of?SELECT?list?is?not?in?GROUP?BY?clause?and?contains?nonaggre”解決方法

    MySQL運(yùn)行報(bào)錯(cuò):“Expression?#1?of?SELECT?list?is?not?in?GR

    這篇文章主要給大家介紹了關(guān)于MySQL運(yùn)行報(bào)錯(cuò):“Expression?#1?of?SELECT?list?is?not?in?GROUP?BY?clause?and?contains?nonaggre”的解決方法,文中將解決方法介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • 解決從集合運(yùn)算到mysql的not like找不出NULL的問題

    解決從集合運(yùn)算到mysql的not like找不出NULL的問題

    這篇文章主要介紹了解決從集合運(yùn)算到mysql的not like找不出NULL的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • 碰到MySQL無法啟動1067錯(cuò)誤問題解決方法

    碰到MySQL無法啟動1067錯(cuò)誤問題解決方法

    創(chuàng)建primay key過程中發(fā)生了斷電,當(dāng)電腦再次啟動時(shí)候,發(fā)現(xiàn)mysql 服務(wù)無法啟動,使用 net start 提示 1067錯(cuò)誤;后來只能通過手工刪除數(shù)據(jù)文件,日志文件,再啟動服務(wù),然后導(dǎo)入數(shù)據(jù)來完成
    2013-01-01
  • mysql連接數(shù)設(shè)置操作方法(Too many connections)

    mysql連接數(shù)設(shè)置操作方法(Too many connections)

    下面小編就為大家?guī)硪黄猰ysql連接數(shù)設(shè)置操作方法(Too many connections)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-03-03
  • mysql索引基數(shù)概念與用法示例

    mysql索引基數(shù)概念與用法示例

    這篇文章主要介紹了mysql索引基數(shù)概念與用法,結(jié)合實(shí)例形式分析了mysql索引基數(shù)的相關(guān)概念、原理、操作命令及相關(guān)使用技巧,需要的朋友可以參考下
    2019-03-03
  • mysql?分組函數(shù)和分組查詢使用詳解

    mysql?分組函數(shù)和分組查詢使用詳解

    分組函數(shù)用作統(tǒng)計(jì)使用,又稱聚合函數(shù),統(tǒng)計(jì)函數(shù),組函數(shù),這篇文章主要介紹了mysql分組函數(shù)分組查詢的操作代碼,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2024-01-01
  • mysql數(shù)據(jù)庫查詢基礎(chǔ)命令詳解

    mysql數(shù)據(jù)庫查詢基礎(chǔ)命令詳解

    這篇文章主要介紹了mysql數(shù)據(jù)庫查詢基礎(chǔ)命令,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-11-11
  • MySQL數(shù)據(jù)庫多表聯(lián)合查詢代碼示例

    MySQL數(shù)據(jù)庫多表聯(lián)合查詢代碼示例

    所謂聯(lián)合就是把多個(gè)表的記錄往一起合并,一起進(jìn)行查詢,也叫多表查詢,這篇文章主要給大家介紹了關(guān)于MySQL數(shù)據(jù)庫多表聯(lián)合查詢的相關(guān)資料,需要的朋友可以參考下
    2024-01-01
  • MySQL性能參數(shù)詳解之Skip-External-Locking參數(shù)介紹

    MySQL性能參數(shù)詳解之Skip-External-Locking參數(shù)介紹

    MySQL的配置文件my.cnf中默認(rèn)存在一行skip-external-locking的參數(shù),即跳過外部鎖定。根據(jù)MySQL開發(fā)網(wǎng)站的官方解釋,External-locking用于多進(jìn)程條件下為MyISAM數(shù)據(jù)表進(jìn)行鎖定
    2016-05-05

最新評論