背景最近在優化專案遇到乙個場景:資料庫表中某個字段儲存是多個字串連線的;
如 合同1(contract1) 對應多個聯絡人:linker1,linker2,這樣 合同a 的id 對應訂單的儲存就是 order1,order2;
我們需要查詢 linker2 和 多少個合同有關;怎麼辦呢?使用 find_in_set 函式
簡述
簡單使用mysql手冊中find_in_set函式的語法:
find_in_set(str,strlist)
str 要查詢的字串
strlist 欄位名 引數以」,」分隔 如 (1,2,3,4)
查詢字段(strlist)中包含(str)的結果,返回結果為null或記錄
假如字串str在由n個子鏈組成的字串列表strlist 中,則返回值的範圍在 1 到 n 之間。
乙個字串列表就是乙個由一些被 『,』 符號分開的子鏈組成的字串。
如果 第乙個引數是乙個常數字串,而第二個是 set 列,則find_in_set() 函式被優化,使用位元計算。
如果str不在strlist 或strlist 為空字串,則返回值為 0 。
若任意乙個引數為null,則返回值為 null。
注意:這個函式在第乙個引數包含乙個逗號(『,』)時將無法正常執行,第二個引數必須以","分割開
和 in 的區別select * from contract where find_in_set(id, '1,2,3,4,5');
id 是乙個表的字段,然後每條記錄分別是id等於1,2,3,4,5的時候。
使用find_in_set函式一次返回多條記錄
是不是發現和 in 一樣啊 (集合)
select * from treenodes where id in (1,2,3,4,5);
現在搜尋 friends 中包含 xiaodao 的記錄,使用increate table `user_info` (
`id` int(8) not null auto_increment,
`name` varchar(16) not null,
`friends` varchar(32) not null,
primary key (`id`)
);insert into `user_info` values (1, 'name1', 'xiaowang,xiaohai,xiaoyang');
insert into `user_info` values (2, 'name2', 'xiaotong,xiaodao,xiaocheng');
insert into `user_info` values (3, 'name3', 'xiaotong,xiaodao,xiaohai');
select * from user_info where 'xiaodao' in(friends);
查詢不到任何資料,因為in 函式 只有當 friends 字段等於 xiaodao 的時候才可以 搜尋的到記錄
現在看看 find_in_set 函式
select * from user_info where find_in_set( 'xiaodao', friends);
這樣就顯示關於 xiaodao 的記錄了。
和 like 的區別
剛才的例子有的人為啥不用 like;沒錯,使用like也是可以查詢出來的,只是在使用模糊匹配可能查詢出錯誤資料
如果使用like 查詢的話insert into `user_info` values (4, 'name1', 'xiaowang,xiaohai,xiaodao2');
insert into `user_info` values (5, 'name1', 'xiaowang,xiaohai,1xiaodao');
select * from user_info where friends like '%xiaodao%';
這樣就會把 不相關的xiaodao2 ,1xiaodao 查詢出來 mysql的優化 MySQL優化
一 sql語句優化 1 使用limit對查詢結果的記錄進行限定 2 避免select 將需要查詢的字段列出來 3 使用連線 join 來代替子查詢 4 拆分大的delete或insert語句 二 選擇合適的資料型別 1 使用可存下資料的最小的資料型別,整型 date,time char,varcha...
mysql 隨機優化 mysql 優化
mysql優化包括兩方面,一方面是sql優化,另一方面是資料庫配置優化 一 sql優化 1.優化資料型別 盡量將字段設定為 not null,如果你要儲存null,手動去設定它,而不是把它設為預設值 盡量可能的使用更小的字段,但也不要太過執著減小資料型別,要為以後的程式拓展預留一定的空間 盡量少用v...
mysql效能優化 mysql效能優化
優化方式 1.空間換時間 冗餘 2.時間換空間 字段優先使用型別 int date char varchar text 索引型別 btree索引 hash索引 索引的葉子下,存放乙個資訊指向所在行的資料位址。btree有利於範圍查詢,hash有利於精確查詢。btree用的更多一些。btree索引的常...