為什麼索引選擇性越高,索引的價值越高?

時間 2021-05-30 00:10:52

1樓:

先說結論,索引選擇性高也不一定價值高。索引價值由許多方面決定,索引選擇性低的不意味著索引價值低下,還取決與業務具體的查詢 SQL查詢條件對應的查詢值,尤其是資料分布特點是需要特別考慮的。

取個直觀的例子,有張 user 表,1000萬記錄,有 user_id、 vip_level 等字段。user_id 是主鍵,vip_level 取值由 1 到 10。

現在業務需求是找出 vip_level 等級最高的那一批使用者。

如果對 vip_level 進行選擇性計算,那麼就是 10/10000000 = 0.00000001,這麼一看,得選擇性低,索引價值應該不太高,所以就不對 vip_level 建立索引了。

然後執行如下的 SQL,保證是全表掃瞄(全表總計 1000萬)。

select

user_id

from

user

where

vip_level=10

;如果這個業務查詢 SQL 是非常頻繁的話,肯定是會影響到系統的效能了。

這裡進行具體的分析,大部分場景,等級高的使用者一般比較少,而且等級高的使用者其商業價值也高,一般使用者等級與等級對應的使用者數成金字塔或者正態分佈,高等使用者一般是少數。

如果對具體對 vip_level 做索引,傳遞的查詢值是 10,那麼他掃瞄行數會在乙個可接受的區間,可以讓業務更好的執行,這個索引價值就變大了。

再例如,如果是直接查詢 user_id ,由於 user_id = 10000 的使用者,要麼只存在一位,要麼不存在,IO 開銷少,所以速度快,而 user_id 是主鍵,有唯一性,其資料分布特性決定的索引選擇性是 1,所以索引價值高。

select * from user where user_id = 10000;

再再例如,這個 user 表的 password 字段,如果系統安全做得好,這個 password 是非明文的,是使用者明文 password 加鹽後的 hash,且資料特性是全表唯一,但是業務上沒有直接通過查詢 password 的需求,縱使選擇性為 1,也沒有索引價值(業務用不上,如果加上了索引就是冗餘的,無用的)。

2樓:

選擇性越高就能排除掉更多無用記錄,篩選後的資料集越小當然價值更高了,當然這只是設計索引考慮的條件之一,具體的設計還是要考慮實際的業務

3樓:

如何索引,代表了如何搜尋。

索引的本質就是抽取資訊的特徵,我們目前的搜尋的模型就是對比我們大腦中的資訊的特徵與資訊的特徵進行對比,相關度高的,就代表這篇文章更像是你要找的。

對於一篇關於狗的文章,你索引成一篇關於貓的文章,你搜尋「狗」,這篇文章當然不會出現在搜尋結果中。這樣的索引的價值當然就不高了。

4樓:

根據資訊熵的公式計算,選擇性越大的索引,熵越大。

更新1 最近看到了b+樹在資料庫中的應用的知識,又想明白了一些。根據索引可以找到記錄在哪個頁中,而低選擇性的索引則肯定定位到很多頁中去,對更多的頁進行掃瞄。

5樓:Feng Guangpu

這個道理不需要去理解B-tree,舉個簡單例子,1000條記錄,列id和gender上都有索引:

1. 字段『gender』,可能有『男』,『女』,『其他』三個值,索引的選擇性為 3/1000 = 0.003

2. 欄位id,每條記錄都不同,索引選擇性為1000/1000 = 1

那麼查詢id為123456且gender為『女』的記錄時應該使用哪個索引?

顯然應該使用id欄位上的索引,只要定位到這條索引記錄,就可以立刻確定是否存在這條記錄,然後再驗證性別是否為『女』,而使用『gender』欄位上的索引,可能需要遍歷多條記錄,對比id後才能確定是否存在這條記錄

再舉乙個極端的情況:如果上述表中所有記錄的『gender』欄位都為『女』,那麼索引的選擇性為1/1000 = 0.001,這時使用『gender』欄位上的索引和全表掃瞄沒啥兩樣

為什麼搜尋引擎在磁碟上的索引不能做到實時新增而資料庫可以?

kaiser 我認為是由於兩者索引實現的方式不同導致的。搜尋引擎主要是基於倒排表來實現,首先得有分詞操作,更新的時候牽扯到的東西太多 而資料庫無需分詞,按照大部分採用B樹實現的話,更新效率相比情況下要小一些。 以Lucene為例,合併是為了減少segment,優化查詢效能,與更新索引是兩回事。磁碟上...

人為什麼會有選擇性失憶?

人在受到創傷後會選擇性遺忘,以為忘記了就可以不用再去感受那個痛苦的感受。然而那個部分的影響會一直都在,如果不喚醒,就會變成無意識的障礙。像有些人一點點小事就反應很大,或者同樣的事情總是重複出現,背後就有很多選擇性遺忘了的創傷。重新面對喚醒開啟轉化這些創傷,需要勇氣! 我是最近才發現我有選擇性失憶的症...

為什麼很多女生要選擇性拒絕男女平等?

淋雨的魚 現階段社會屬於快生活節奏,無論是經濟還是政治,都是如此。男人女人由於前幾年有個別女權主義的哄抬,然後從古到今男主外女主內的思想被惡意解讀,使得女人覺得就應該在坐在家中享受。最主要的是對於社會的很多資訊傳播都是片面甚至有的就是錯誤的,但是很多都被抓住當作熱點肆意傳播,導致現在倫理崩壞 那個 ...