elasticsearch為什么比mysql快


mysql關系型數據庫索引原理

數據庫的索引是B+tree結構

主鍵是聚合索引 其他索引是非聚合索引,先從非聚合索引找,見下圖

 

 

 elasticsearch倒排索引原理

 

 

 兩者對比

對於倒排索引,要分兩種情況:

1、基於分詞后的全文檢索

這種情況是es的強項,而對於mysql關系型數據庫而言完全是災難

因為es分詞后,每個字都可以利用FST高速找到倒排索引的位置,並迅速獲取文檔id列表

但是對於mysql檢索中間的詞只能全表掃(如果不是搜頭幾個字符)

2、精確檢索

這種情況我想兩種相差不大,有些情況下mysql的可能會更快些

如果mysql的非聚合索引用上了覆蓋索引,無需回表,則速度可能更快

es還是通過FST找到倒排索引的位置並獲取文檔id列表,再根據文檔id獲取文檔並根據相關度算分進行排序,但es還有個殺手鐧,即天然的分布式使得在大數據量面前可以通過分片降低每個分片的檢索規模,並且可以並行檢索提升效率

用filter時更是可以直接跳過檢索直接走緩存

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM