MySQL中FIND_IN_SET()函數(shù)與in的區(qū)別及說明
一、官方涵義
FIND_IN_SET(str,strlist) : str 要查詢的字符串,strlist 需查詢的字段,參數(shù)以”,”分隔,形式如 (1,2,6,8,10,22);該函數(shù)的作用是查詢字段(strlist)中是否包含(str)的結(jié)果,返回結(jié)果為null或記錄。
in常用于where表達(dá)式中,其作用是查詢某個范圍內(nèi)的數(shù)據(jù)。
二、find_in_set() 和 in 的區(qū)別
1、in后面只能跟常量, find_in_set()函數(shù)可以使用常量或字段。
2、in是完全匹配,find_in_set()函數(shù)是精確匹配,字段值以英文”,”分隔。
另:like是廣泛的模糊匹配,字符串中沒有分隔符,F(xiàn)ind_IN_SET 是精確匹配,字段值以英文”,”分隔,F(xiàn)ind_IN_SET查詢的結(jié)果要小于like查詢的結(jié)果。
三、避坑要點(diǎn)
其實(shí)寫上面那些內(nèi)容主要是為了引出下面的這個大坑。
最近項(xiàng)目中又遇到了SQL查詢緩慢的問題,經(jīng)查閱代碼,SQL里面就用到了find_in_set()函數(shù)。
explain一下,發(fā)現(xiàn)并沒有使用到索引,查詢耗時三秒左右。
問題原因就是在這兒,find_in_set()是一個函數(shù),在創(chuàng)建了索引的字段上使用函數(shù)會造成索引失效,所以查詢緩慢。
解決辦法,就是將find_in_set()改為in(),in可以用到索引,改完之后,重新select,耗時零點(diǎn)零幾秒,完美解決!
總結(jié)
所以在SQL開發(fā)過程中,一定要注意函數(shù)的使用,會不會造成索引失效,而導(dǎo)致查詢緩慢的問題,從來及早發(fā)現(xiàn)并避免事故發(fā)生。
- mysql中find_in_set()函數(shù)的使用及in()用法詳解
- mysql中find_in_set()函數(shù)用法及自定義增強(qiáng)函數(shù)詳解
- Mysql中find_in_set()函數(shù)用法詳解以及使用場景
- mysql中find_in_set()函數(shù)的使用詳解
- mysql通過find_in_set()函數(shù)實(shí)現(xiàn)where in()順序排序
- MySQL中find_in_set()函數(shù)用法示例詳解
- mysql中find_in_set()函數(shù)用法及自定義增強(qiáng)函數(shù)
- MySQL?FIND_IN_SET字符串函數(shù)深度解析
相關(guān)文章
mysql 查看當(dāng)前使用的配置文件my.cnf的方法(推薦)
下面小編就為大家?guī)硪黄猰ysql 查看當(dāng)前使用的配置文件my.cnf的方法(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-04-04
Mysql DNS反向解析導(dǎo)致連接超時過程分析(skip-name-resolve)
從其它地方連接MySQL數(shù)據(jù)庫的時候,有時候很慢。慢的原因有可能是MySQL進(jìn)行反向DNS解析造成的,這里簡單介紹下原理,需要的朋友可以參考下2013-03-03
深入了解mysql的4種常用、重要的數(shù)據(jù)類型
對于在開發(fā)大型電子商務(wù)網(wǎng)站時,如果碰到有限的硬件和系統(tǒng)環(huán)境情況下,合理的數(shù)據(jù)庫表結(jié)構(gòu)的設(shè)計是必不可少的2014-05-05
MySQL Shell import_table數(shù)據(jù)導(dǎo)入的實(shí)現(xiàn)
這篇文章主要介紹了MySQL Shell import_table數(shù)據(jù)導(dǎo)入的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-08-08

