Mysql find in set 效率問題

2022-03-09 18:14:48 字數 1341 閱讀 7186

find_in_set(str,strlist)

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

mysql find in set 函式的使用

mysql 中 find in set 函式語法 find in set str,strlist 假如字串str在由n個子鏈組成的字串列表strlist 中,則返回值的範圍在 1 到 n 之間。乙個字串列表就是乙個由一些被 符號分開的子鏈組成的字串。如果第乙個引數是乙個常數字串,而第二個是type ...

研效優化實踐 WeTest提效測試

1.1真通過與假通過 每次自動化相容測試結束後,wetest平台會返回乙份對應的測試報告,涵蓋測試過程中的詳細資訊,如裝置日誌 截圖 效能資料等,可以做進一步的結果分析。概覽資料涵蓋本次裝置維度的測試結果,包括通過的裝置數量 未通過的裝置數量等。裝置維度未通過的定義為發生相容性問題,如crash a...

Filter revealtrans 濾鏡效果

任意位置插入 filter revealtrans 濾鏡效果 filter revealtrans duration 轉換的秒數,transition 轉換的型別 表示式中的transition引數的引數值有24中,以代號0 23來表示,分別代表24中顯示型別,具體的引數值列表如下所示 同時還可以參...