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表達式中,其作用是查詢某個范圍內(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é)果。
三、避坑要點
其實寫上面那些內(nèi)容主要是為了引出下面的這個大坑。
最近項目中又遇到了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,耗時零點零幾秒,完美解決!
總結(jié)
所以在SQL開發(fā)過程中,一定要注意函數(shù)的使用,會不會造成索引失效,而導(dǎo)致查詢緩慢的問題,從來及早發(fā)現(xiàn)并避免事故發(fā)生。
- mysql中find_in_set()函數(shù)的使用及in()用法詳解
- mysql中find_in_set()函數(shù)用法及自定義增強函數(shù)詳解
- Mysql中find_in_set()函數(shù)用法詳解以及使用場景
- mysql中find_in_set()函數(shù)的使用詳解
- mysql通過find_in_set()函數(shù)實現(xiàn)where in()順序排序
- MySQL中find_in_set()函數(shù)用法示例詳解
- mysql中find_in_set()函數(shù)用法及自定義增強函數(shù)
- MySQL FIND_IN_SET字符串函數(shù)深度解析
相關(guān)文章
MySQL數(shù)據(jù)庫INNODB表損壞修復(fù)處理過程分享
突然收到MySQL報警,從庫的數(shù)據(jù)庫掛了,一直在不停的重啟,打開錯誤日志,發(fā)現(xiàn)有張表壞了。innodb表損壞不能通過repair table 等修復(fù)myisam的命令操作?,F(xiàn)在記錄下解決過程2013-08-08
MySQL物理備份與恢復(fù)工具XtraBackup使用小結(jié)
本文主要介紹了MySQL物理備份與恢復(fù)工具XtraBackup使用小結(jié),借助Percona XtraBackup工具實現(xiàn)MySQL的物理備份與恢復(fù),相當于將整個MySQL進行了復(fù)制,再粘貼到其他地方運行,感興趣的可以了解一下2024-07-07

