數(shù)據(jù)庫(kù)面試時(shí),常問(wèn)的 Selectivity 和 Cardinality 到底是什么
點(diǎn)擊藍(lán)色“有關(guān)SQL”關(guān)注我喲
加個(gè)“星標(biāo)”,天天與10000人一起快樂(lè)成長(zhǎng)

讓我們舉個(gè)例子:
假設(shè)新學(xué)期報(bào)道,當(dāng)你置身于班級(jí)中時(shí),你發(fā)現(xiàn)大家都穿著同樣顏色的衣服,無(wú)非男女款式不同,男同學(xué)長(zhǎng)褲,女同學(xué)長(zhǎng)裙,但都是黑色。人生地不熟的你,怎么才能確定你們的女班長(zhǎng)在哪一堆中間(假設(shè)班長(zhǎng)是女的,且你還不知道她長(zhǎng)什么模樣)?
當(dāng)然,說(shuō)句廢話,只要你就讀的中學(xué)不是女子中學(xué),或者男子中學(xué),你們班級(jí)肯定有男有女。按照性別來(lái)歸類,總共只有 2 類。這兩類就可以被稱作 Cardinality = 2.
有人會(huì)問(wèn),知道 Cardinality = 2, 能找到班長(zhǎng)嗎?答案自然沒(méi)那么簡(jiǎn)單,放在后面講。這里先鋪個(gè)墊,讓大家對(duì) Cardinality 有個(gè)形象的認(rèn)識(shí)。
再來(lái)細(xì)分下同學(xué)的穿著。從服裝上已經(jīng)無(wú)法再細(xì)分了,大家都是黑色,長(zhǎng)褲長(zhǎng)裙一半一半。
但從球鞋上,還是能看出花樣來(lái)。男同學(xué),普遍的阿迪,耐克,特別一些的會(huì)穿美金龍,阿瑟士。而女同學(xué)們,則花樣多了,阿迪,新百倫,斯凱奇,老爹鞋,熱風(fēng),馬丁靴,森馬,甚至還有百麗,Coach, Miss Sixty等等。
一圈走下來(lái),細(xì)心的你,發(fā)現(xiàn)一個(gè)統(tǒng)計(jì)數(shù)據(jù),男同學(xué)穿4種鞋,女同學(xué)有16種品牌的鞋。按照剛才的算法, Cardinality 就等于 20.
經(jīng)統(tǒng)計(jì),全班總共有 50 人, 2 種性別的人,穿了 20 種品牌的鞋。
接下來(lái),就是你挑班長(zhǎng)的方法了:
按照男女比1:1來(lái),你至少要從 25 個(gè)女同學(xué)里找到你的班長(zhǎng);
按照品牌的鞋來(lái)找,你會(huì)發(fā)現(xiàn),只要從 50/20 個(gè)人里面找,就可以了。
自然,哪種方法快,就不用言說(shuō)了。按照穿的鞋來(lái)找,最多只要找3個(gè)人,一問(wèn)便知。
這里的依據(jù),便是 50/20, 50/2 , 即 總?cè)藬?shù)/總分類個(gè)數(shù),而 Cardinality 在這里就承擔(dān)總分類個(gè)數(shù)的角色,也就是同一類屬性中,不同屬性值的個(gè)數(shù)。
將這個(gè)公式倒過(guò)來(lái),總分類個(gè)數(shù)/總?cè)藬?shù),就是這類屬性的 Selectivity. 值越高,表示越多樣化,也就越容易找到想要的人;值越低,表示缺乏多樣性,精確查找的效率就越低。
可見(jiàn), Selectivity 可以幫助我們有效評(píng)估字段建立索引的價(jià)值。
往期精彩:
我在面試數(shù)據(jù)庫(kù)工程師候選人時(shí),常問(wèn)的一些題
零基礎(chǔ) SQL 數(shù)據(jù)庫(kù)小白,從入門到精通的學(xué)習(xí)路線與書(shū)單
