首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

線性索引查找:稠密、分塊與倒排索引結構詳解

     編輯:關於C語言

索引查找核心模型

索引查找將「查找」拆解為兩階段:

  1. 索引表查找:在較小的索引表中按關鍵字定位記錄的存儲地址/塊號。
  2. 數據區讀取:根據地址直接讀取完整記錄。

索引項結構:{關鍵字, 記錄地址/塊號}。索引表本身可有序(支援折半等)或無序(僅順序查找)。

三大索引結構詳解

1. 稠密索引

  • 定義:每個數據記錄對應一個索引項。
  • 優點:查找快,直接定位到具體記錄。
  • 缺點:索引表大,隨數據量線性增長;大數據量時索引本身需二級索引或分頁。
  • 適用:數據量較小、記錄長度固定、頻繁點查詢場景。

2. 分塊索引

  • 定義:將數據劃分為若干塊,塊間有序(塊最大關鍵字遞增),塊內無序。每塊對應一個索引項(記錄塊最大關鍵字與塊起始地址)。
  • 查找流程:
    1. 在索引表中(折半/插值/斐波那契)查找目標塊。
    2. 在目標塊內順序查找具體記錄。
  • 優點:索引表小(塊數 ≪ 記錄數),插入刪除只需調整塊內,維護成本低。
  • 缺點:塊內順序查找較慢;塊大小選擇需權衡(塊大→索引小但塊內慢;塊小→索引大但塊內快)。
  • 適用:大數據量、頻繁動態增刪、磁盤存儲(塊對應磁盤頁/區)。

3. 倒排索引

  • 定義:以屬性值(關鍵字/詞項)為主鍵,記錄包含該屬性的所有文檔/記錄 ID 列表。即「詞 → 文檔列表」映射。
  • 核心結構:
    • 詞典:所有不重複詞項,有序存儲(支援折半/Trie/雜湊查找)。
    • 倒排列表:每個詞項對應的文檔 ID 有序序列(可壓縮存儲)。
  • 典型應用:全文搜尋引擎、日誌分析、標籤系統、推薦系統倒排表。
  • 查找邏輯:多詞查詢 → 分別取出倒排列表 → 布爾運算(交/並/差)合併 → 排序打分 → Top-K 輸出。

三類索引對比總結

維度稠密索引分塊索引倒排索引
索引粒度記錄級塊級詞項級
索引大小大(∝ 記錄數)小(∝ 塊數)中(∝ 不重複詞項數)
查找速度最快(直達記錄)中(兩階段)視詞項頻率與合併算法
動態維護困難(插刪需移動索引)較易(塊內調整)複雜(需合併倒排列表)
典型場景小表點查、主鍵索引大表範圍查、磁盤存儲全文搜尋、多屬性過濾

工程延伸:從線性索引到多級索引與 B+ 樹

  • 稠密索引過大時 → 建立二級索引(索引的索引) → 形成多級索引。
  • 多級索引固化為磁盤頁面大小、平衡多路查找樹 → B+ 樹(資料庫主流索引結構)。
  • 倒排索引詞典常用 FST (Finite State Transducer) 或 Trie + 跳表 實現高效前綴匹配與壓縮。

總結

線性索引查找通過「以空間換時間、以結構換速度」的思想,提供了稠密、分塊、倒排三種經典權衡點。理解其結構特性與適用邊界,是設計資料庫索引、搜尋引擎、大數據檢索系統的核心基礎。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved