Mysql find_in_set 效率問題


FIND_IN_SET(str,strList)

  • str 要查詢的字符串
  • strList 字段名,參數以“,”分隔,如(1,2,6,8)
  • 查詢字段(strList)中包含的結果,返回結果null或記錄。

strList 字符串列表就是一個由一些被 ‘,’ 符號分開的子鏈組成的字符串.如果str不在strlist 或strlist 為空字符串,則返回值為 0 。如任意一個參數為NULL,則返回值為 NULL。這個函數在第一個參數包含一個逗號(‘,’)時將無法正常運行。

一、基礎用法

select find_in_set('1','1,2,3,4,5,6'); select find_in_set('2','1,2,3,4,5,6'); select find_in_set('7','1,2,3,4,5,6'); select find_in_set('2','1,21,3,4,5,6'); select find_in_set('1',''); null select find_in_set(null,'1,2,3,4,5,6'); null select find_in_set('1',null);

二、find_in_set() 和 in 的區別
例子:
INSERT INTO `tb_test` VALUES (1, 'name', 'daodao,xiaohu,xiaoqin');
1.SELECT * from tb_test where "daodao" in (list);
這樣是查不出數據的,這樣只有當list字段的值等於'daodao'時(和IN前面的字符串完全匹配),查詢才有效,否則都得不到結果,即使'daodao'真的在list中。
2.
SELECT * from tb_test WHERE 'daodao' IN ('libk', 'zyfon', 'daodao')
解析:原因其實是(一)中 (list) list是變量, 而(二)中 ('libk', 'zyfon', 'daodao')是常量。
3.
SELECT * from tb_test where FIND_IN_SET("daodao",list)
解析:find_in_set 函數 這里的“list” 是 變量

三、
find_in_set() 和 like 的區別
like是廣泛的模糊匹配,字符串中沒有分隔符,Find_IN_SET 是精確匹配,字段值以英文”,”分隔,Find_IN_SET查詢的結果要小於like查詢的結果。

項目中根據地區標識查詢用到了find_in_set,但考慮到效率問題,最后還是做了調整用in來處理。

by:jiaofeifei


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM