隨著數(shù)據(jù)量的不斷增長,數(shù)據(jù)的索引和搜索變得越來越重要。在實際應(yīng)用中,我們通常會用到兩種索引,即ES倒排索引和MySQL索引。
ES倒排索引是一種非常高效的索引方式,它在實現(xiàn)全文搜索的時候非常常用。倒排索引是將文檔中的每個單詞映射到包含該單詞的所有文檔中的位置,比如在數(shù)據(jù)庫中存儲一個含有文本字段的表,每條記錄都包括一個文本信息,然后我們以每個單詞為關(guān)鍵字建立一個索引,索引中記錄了哪些文檔包含該單詞及出現(xiàn)的位置。這種方式可以提高全文搜索的效率,因為可以快速的定位到相關(guān)文檔。
倒排索引的例子: word1:1-3, 2-8, 3-2 word2:2-7, 3-5 word3:1-6
MySQL索引,也叫做B樹索引,是一種基于樹形結(jié)構(gòu)的索引方式。MySQL中索引的實現(xiàn)方式大概就是采用B+樹結(jié)構(gòu),可以說是B樹的一個變種。B+樹中每個節(jié)點可以存儲多個鍵值,以及對應(yīng)的數(shù)據(jù)指針(或者是數(shù)據(jù)在葉子節(jié)點上就儲存)。B+樹的葉子節(jié)點指針構(gòu)成了一個雙向鏈表,便于范圍查詢。
B+樹的結(jié)構(gòu): 21 / \ 11 16 / | \ | \ 1 5 8 12 17 其中的數(shù)字可以看做是鍵值,葉子節(jié)點包含了它們對應(yīng)的值,箭頭指向的是下一節(jié)點的位置。
ES倒排索引和MySQL索引各有優(yōu)缺點,并不能說一種優(yōu)于另一種。在實際應(yīng)用中,我們需要根據(jù)具體場景選擇適合的索引方式。比如在大數(shù)據(jù)量的全文檢索場景中,ES倒排索引表現(xiàn)要好于MySQL索引。