第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

請問SET類型能夠做索引嗎,做完以后對FIND_IN_SET有用嗎?

請問SET類型能夠做索引嗎,做完以后對FIND_IN_SET有用嗎?

牛魔王的故事 2023-04-14 14:10:33
Mysql中的FIND_IN_SET函數(shù)在我知道它之前,我在做一個一對多的外鍵查詢時,都會在中間設(shè)計一個關(guān)系表。比如一篇文章(post)對應(yīng)多個標(biāo)簽(tag),我就會在中間設(shè)計一個關(guān)系表(post_tag_mapping)來記錄文章和標(biāo)簽的對應(yīng)關(guān)系,然后查詢某一個標(biāo)簽下的文章時,就用JOIN語句來實(shí)現(xiàn)了,這也應(yīng)該是處理一對多關(guān)系查詢時的標(biāo)準(zhǔn)做法。一般語句就像下面SELECT * FROM post LEFT JOIN post_tag_mapping WHERE tag_id = 123但是當(dāng)我發(fā)現(xiàn)FIND_IN_SET函數(shù)后,就可以完全不用JOIN這種查詢方式了,我們完全可以在文章表里設(shè)置一個類型為SET的標(biāo)簽字段(tags),它存儲標(biāo)簽id的格式就像這樣111,222,333,查詢語句就變成了SELECT * FROM post WHERE FIND_IN_SET('123', tags)不用做連接查詢了,我不知道這兩者在查詢效率上哪個更占優(yōu)勢?他們的應(yīng)用場景有什么需要注意的地方?
查看完整描述

2 回答

?
慕姐4208626

TA貢獻(xiàn)1852條經(jīng)驗(yàn) 獲得超7個贊

就你的例子來說,用中間(映射)表,可以借助索引提高查詢效率。FIND_IN_SET屬于字符串操作,如果用在字段上,得全表掃描。

SET類型的實(shí)現(xiàn)是64位的bitmap(對應(yīng)64個成員),作為FIND_IN_SET的第二個參數(shù),可以用位運(yùn)算來提高函數(shù)的效率(不等于查詢效率)。限制有:

  • 成員不能包含“,”字符

  • 最多只能有64個成員,而且需要預(yù)定義,所以用來做tag不合適

  • 即便加索引也是整體的(即64個位對應(yīng)的組合狀態(tài)),而不能針對某一個成員(某一個位)

  • UPDATE操作也是整體的,你需要自己運(yùn)算新的bitmap

所以SET最適合用于值域小,取值固定,整體查詢的狀態(tài)集合。比如記錄某人去過中國哪些省:可以直接比較兩個人是否去過相同的省份,或者直接獲得差別,可以高效地查詢哪些人只去過某省或某些省,但查哪些人去過某省或某些省依然是掃全表。


查看完整回答
反對 回復(fù) 2023-04-17
?
縹緲止盈

TA貢獻(xiàn)2041條經(jīng)驗(yàn) 獲得超4個贊

語法:

FIND_IN_SET(str,strlist) 
返回str在strlist(1~N個以逗號分割的字符串)中的位置(1~N)。
select FIND_IN_SET('dell','apple,thinkpad,dell') AS FIND;

FIND
3

str不在strlist中或者strlist為空時返回0

select FIND_IN_SET('acer','apple,thinkpad,dell') AS FIND

FIND
0

select FIND_IN_SET('acer','') AS FIND

FIND
0

存在參數(shù)為 NULL 時返回 NULL

select FIND_IN_SET('acer',NULL) AS FIND

FIND
NULL

select FIND_IN_SET(NULL,'apple,thinkpad,dell') AS FIND

FIND
NULL

select FIND_IN_SET(NULL,NULL) AS FIND

FIND
NULL

如果第一個參數(shù)為數(shù)字類型:

select FIND_IN_SET('001','003,001,002') AS FIND

FIND
2

select FIND_IN_SET(001,'003,001,002') AS FIND

FIND
0

select FIND_IN_SET(001,'003,1,002') AS FIND

FIND
2


查看完整回答
反對 回復(fù) 2023-04-17
  • 2 回答
  • 0 關(guān)注
  • 228 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號