mysql關係型數據庫索引原理
數據庫的索引是B+tree結構
主鍵是聚合索引 其他索引是非聚合索引,先從非聚合索引找,見下圖
elasticsearch倒排索引原理
兩者對比
對於倒排索引,要分兩種情況:
1、基於分詞後的全文檢索
這種情況是es的強項,而對於mysql關係型數據庫而言完全是災難
因爲es分詞後,每個字都可以利用FST高速找到倒排索引的位置,並迅速獲取文檔id列表
但是對於mysql檢索中間的詞只能全表掃(如果不是搜頭幾個字符)
2、精確檢索
這種情況我想兩種相差不大,有些情況下mysql的可能會更快些
如果mysql的非聚合索引用上了覆蓋索引,無需回表,則速度可能更快
es還是通過FST找到倒排索引的位置並獲取文檔id列表,再根據文檔id獲取文檔並根據相關度算分進行排序,但es還有個殺手鐗,即天然的分佈式使得在大數據量面前可以通過分片降低每個分片的檢索規模,並且可以並行檢索提升效率
用filter時更是可以直接跳過檢索直接走緩存