數據庫的索引是B+tree結構mysql
主鍵是聚合索引 其餘索引是非聚合索引,先從非聚合索引找,見下圖sql
對於倒排索引,要分兩種狀況:數據庫
這種狀況是es的強項,而對於mysql關係型數據庫而言徹底是災難緩存
由於es分詞後,每一個字均可以利用FST高速找到倒排索引的位置,並迅速獲取文檔id列表elasticsearch
可是對於mysql檢索中間的詞只能全表掃(若是不是搜頭幾個字符)分佈式
這種狀況我想兩種相差不大,有些狀況下mysql的可能會更快些大數據
若是mysql的非聚合索引用上了覆蓋索引,無需回表,則速度可能更快spa
es仍是經過FST找到倒排索引的位置並獲取文檔id列表,再根據文檔id獲取文檔並根據相關度算分進行排序,但es還有個殺手鐗,即自然的分佈式使得在大數據量面前能夠經過分片下降每一個分片的檢索規模,而且能夠並行檢索提高效率3d
用filter時更是能夠直接跳過檢索直接走緩存blog