當B+樹無法滿足索引要求時,比如根據前幾個關鍵字來查詢所有相關數據。
InnoDB 1.2.x版本開始支持全文檢索
倒排索引
全文檢索一般使用倒排索引來實現。倒排索引和B+樹一樣也是一種索引結構,它在輔助表中存儲了單詞與單詞自身在一個或多個文檔中所在位置的映射(1對多)。主要有兩種表現形式:
- {單詞,單詞所在文檔的ID}
- {單詞,(單詞所在文檔的ID,在文檔中的具體位置)}
比如一個表t存儲的內容如下圖:
然後倒排索引會根據相關的word來構造一個關聯數組,如下圖:
如果是按照第二種格式來存儲,即還要存儲word在文檔中的位置的話:
InnoDB全文檢索
1.2.x版本開始支持全文檢索,採用了第二種full inverted index方式,把(DocumentID,Position)視爲一個list。
InnoDB爲了提高全文檢索的並行性能,設置了6個輔助表,每張表根據word的Latin編碼來進行排序分區。
這6張表是持久表,存在磁盤上,InnoBD爲了他踢高檢索性能,也搞了一個FTS Index Cache(全文檢索索引緩存),這個緩存時一個紅黑樹,根據(word,list)進行排序,在插入數據的時候會動態的更新表,然後再批量的刷新到磁盤的表上。
數據庫關閉時FTS Index Cache中的數據庫會同步到磁盤上的Auxiliary table上。
參數innodb_ft_cache_size來控制FTS Index Cache的大小。默認是32M