Mysql--基礎知識點--85.1--Innodb自適應哈希索引

1. 自適應哈希索引的用途

InnoDB 的自適應哈希索引(Adaptive Hash Index, AHI)是 MySQL 數據庫引擎中一項智能優化查詢性能的功能。其核心作用如下:

  • 加速等值查詢
    哈希索引通過哈希函數將鍵映射到固定位置,實現 O(1) 時間復雜度的快速查找。對于頻繁使用等值條件(=IN)的查詢,AHI 能大幅減少查詢時間。

  • 動態優化熱點數據
    InnoDB 會監控緩沖池中數據頁的訪問頻率。當某個頁(如二級索引頁)被頻繁訪問時,引擎自動為其構建哈希索引,無需人工干預。

  • 內存駐留,透明管理
    哈希索引完全在內存中維護,利用緩沖池加速查詢。其創建、刪除和更新由 InnoDB 自動完成,對用戶透明。

2. 工作原理

監控訪問模式

InnoDB 持續跟蹤緩沖池中數據頁的訪問頻率。若某個頁在連續查詢中滿足以下條件,則觸發哈希索引構建:

  • 相同查詢模式:如固定條件的等值查詢。
  • 訪問次數閾值:默認超過 100 次訪問。
  • 頁匹配列數:頁中匹配查詢條件的列數超過總列數的 1/16。

動態構建哈希索引

滿足條件的頁會被加入哈希表,鍵為索引值的前綴,值為數據頁的物理地址。后續相同條件的查詢可直接通過哈希表定位數據頁,跳過 B+ 樹索引的逐層查找。

自動淘汰機制

若頁的訪問頻率下降,或哈希索引占用過多內存,InnoDB 會自動刪除低效的哈希條目,平衡性能與資源消耗。

3. 使用場景

  • 高頻等值查詢:如用戶登錄(通過用戶 ID 查詢)、訂單狀態查詢(通過訂單號)。
  • 熱點數據訪問:如實時排行榜、高頻更新的緩存表。
  • 內存充足環境:哈希索引依賴緩沖池內存,需確保 innodb_buffer_pool_size 配置合理。

4. 對性能的影響

優勢

  • 查詢速度提升:等值查詢速度可提升 2 倍以上(官方數據)。
  • 減少資源消耗:降低 B+ 樹索引的磁盤 I/O 和 CPU 消耗。

局限性

  • 僅支持等值查詢:范圍查詢(BETWEEN)、模糊查詢(LIKE)無法使用。
  • 內存占用:哈希表會占用緩沖池空間,需監控 SHOW ENGINE INNODB STATUS 中的哈希索引使用情況。
  • 動態維護開銷:頻繁的數據變更可能導致哈希索引重建,增加 CPU 負載。

5. 生活中的類比

假設你經營一家書店:

  • 傳統方式:顧客按書籍分類(B+ 樹索引)查找,需逐層瀏覽書架。
  • 自適應哈希索引:為熱門書籍(如《追風箏的人》)在收銀臺設立“快速取書點”(哈希索引)。顧客直接報書名,店員立即從固定位置取書,無需翻找書架。

6. 配置與監控

啟用/禁用

-- 查看當前狀態
SHOW VARIABLES LIKE 'innodb_adaptive_hash_index';-- 禁用自適應哈希索引(需重啟生效)
SET GLOBAL innodb_adaptive_hash_index = OFF;

7 監控使用

SHOW ENGINE INNODB STATUS;
-- 關注 "Hash table size" 和 "Hash searches/s" 等指標

8 總結

InnoDB 自適應哈希索引是一種智能、自動化的性能優化工具,尤其適合讀多寫少、等值查詢密集的場景。通過動態構建內存哈希表,它顯著降低了查詢延遲,但需權衡內存使用和維護開銷。合理配置和監控是發揮其優勢的關鍵。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/76822.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/76822.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/76822.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SQL優化技術分享:從 321 秒到 0.2 秒的性能飛躍 —— 基于 PawSQL 的 TPCH 查詢優化實戰

在數據庫性能優化領域,TPC-H 測試集是一個經典的基準測試工具,常用于評估數據庫系統的查詢性能。本文將基于 TPCH 測試集中的第 20個查詢,結合 PawSQL 自動化優化工具,詳細分析如何通過 SQL 重寫和索引設計,將查詢性能…

SpringBoot3-web開發筆記(下)

內容協商 實現:一套系統適配多端數據返回 多端內容適配: 1. 默認規則 SpringBoot 多端內容適配。 基于請求頭內容協商:(默認開啟) 客戶端向服務端發送請求,攜帶HTTP標準的Accept請求頭。 Accept: applica…

Graylog 索引配置詳解與優化建議

Graylog 索引配置詳解與優化建議 🚀 前言一、索引集基礎信息 📚二、分片(Shards)與副本(Replicas)設置 ??1. 分片 (Shards)2. 副本 (Replicas) 三、 字段類型刷新間隔(Field Type Refresh Int…

數據結構*包裝類泛型

包裝類 什么是包裝類 在講基本數據類型的時候,有提到過包裝類。 基本數據類型包裝類byteByteshortShortintIntegerlongLongfloatFloatdoubleDoublecharCharacterbooleanBoolean 我們知道:基本數據類型并不是對象,沒有對象所具有的方法和屬…

【JDBC-54.1】MySQL JDBC連接字符串常用參數詳解

在Java應用程序中連接MySQL數據庫時,JDBC連接字符串是建立連接的關鍵。一個配置得當的連接字符串不僅能確保連接成功,還能優化性能、增強安全性并處理各種連接場景。本文將深入探討MySQL JDBC連接字符串的常用參數及其最佳實踐。 1. 基本連接字符串格式…

[ctfshow web入門] web37

信息收集 題目有了變化,include$c if(isset($_GET[c])){$c $_GET[c];if(!preg_match("/flag/i", $c)){include($c);echo $flag;}}else{highlight_file(__FILE__); }解題 通過協議解題 參考[ctfshow web入門] web31 同樣是include,之前的方…

Linux 調試代碼工具:gdb

文章目錄 一、debug vs release:兩種程序形態的本質差異1. 什么是 debug 與 release?2. 核心差異對比 二、為什么需要 debug:從項目生命周期看調試價值1. 項目開發流程中的調試閉環(流程圖示意)2. Debug 的核心意義與目…

Python設計模式:命令模式

1. 什么是命令模式? 命令模式是一種行為設計模式,它將請求封裝為一個對象,從而使您能夠使用不同的請求、隊列或日志請求,以及支持可撤銷操作。 命令模式的核心思想是將請求的發送者與請求的接收者解耦,使得兩者之間的…

nlp面試重點

深度學習基本原理:梯度下降公式,將損失函數越來越小,最終預測值和實際值誤差比較小。 交叉熵:-p(x)logq(x),p(x)是one-hot形式。如果不使用softmax計算交叉熵,是不行的。損失函數可能會非常大,…

Leetcode:二叉樹

94. 二叉樹的中序遍歷 class Solution {public List<Integer> inorderTraversal(TreeNode root) {TreeNode cur root;Stack<TreeNode> stack new Stack<>();List<Integer> list new ArrayList<>();while (!stack.isEmpty() || cur ! null) {…

SQL:Constraint(約束)

目錄 &#x1f3af; 什么是 Constraint&#xff1f; MySQL 中常見的約束類型&#xff1a; 1. PRIMARY KEY 2. FOREIGN KEY 3. UNIQUE 4. NOT NULL 5. DEFAULT 6. CHECK&#xff08;MySQL 8.0&#xff09; 7. AUTO_INCREMENT &#x1f3af; 什么是 Constraint&#xf…

數據庫數據恢復——sql server數據庫被加密怎么恢復數據?

SQL server數據庫數據故障&#xff1a; SQL server數據庫被加密&#xff0c;無法使用。 數據庫MDF、LDF、log日志文件名字被篡改。 數據庫備份被加密&#xff0c;文件名字被篡改。 SQL server數據庫數據恢復過程&#xff1a; 1、將所有數據庫做完整只讀備份。后續所有數據恢…

MySQL 用 limit 影響性能的優化方案

一.使用索引覆蓋掃描 如果我們只需要查詢部分字段&#xff0c;而不是所有字段&#xff0c;我們可以嘗試使用索引覆蓋掃描&#xff0c;也就是讓查詢所需的所有字段都在索引中&#xff0c;這樣就不需要再訪問數據頁&#xff0c;減少了隨機 I/O 操作。 例如&#xff0c;如果我們…

【算法筆記】并查集詳解

&#x1f680; 并查集&#xff08;Union-Find&#xff09;詳解&#xff1a;原理、實現與優化 并查集&#xff08;Union-Find&#xff09;是一種非常高效的數據結構&#xff0c;用于處理動態連通性問題&#xff0c;即判斷若干個元素是否屬于同一個集合&#xff0c;并支持集合合…

鴻蒙HarmonyOS埋點SDK,ClkLog適配鴻蒙埋點分析

ClkLog埋點分析系統&#xff0c;是一種全新的、開源的洞察方案&#xff0c;它能夠幫助您捕捉每一個關鍵數據點&#xff0c;確保您的決策基于最準確的用戶行為分析。技術人員可快速搭建私有的分析系統。 ClkLog鴻蒙埋點SDK通過手動埋點的方式實現HarmonyOS 原生應用的前端數據采…

JMeter的關聯

關聯&#xff1a;上一個請求的響應結果和下一個請求的數據有關系 xpath提取器 適用場景 HTML/XML文檔結構化數據&#xff1a; 適用于從HTML或XML文檔中提取結構化數據。例如&#xff0c;提取表格中的數據、列表中的項目等。示例&#xff1a;從HTML表格中提取所有行數據。 …

Spring Security 權限配置詳解

&#x1f31f;Spring Security 權限配置詳解&#xff1a;從基礎到進階 Spring Security 是一個功能強大、可高度自定義的安全框架&#xff0c;主要用于為基于 Spring 的應用程序提供身份驗證和授權功能。 本篇文章將帶你深入理解 Spring Security 的權限配置機制&#xff0c;掌…

pycharm中安裝Charm-Crypto

一、安裝依賴 1、安裝gcc、make、perl sudo apt-get install gcc sudo apt-get install make sudo apt-get install perl #檢查版本 gcc -v make -v perl -v 2、安裝依賴庫m4、flex、bison(如果前面安裝過pypbc的話,應該已經裝過這些包了) sudo apt-get update sudo apt…

【MCAL】AUTOSAR架構下基于SPI通信的驅動模塊詳解-以TJA1145為例

目錄 前言 正文 1.TJA1145驅動代碼中的SPI協議設計 1.1 對SPI Driver的依賴 1.2 對SPI配置的依賴 1.2.1 SpiExternalDevice 1.2.2 Channel_x 1.2.3 Job_x 1.2.4 Sequence N 1.2.5 Sequence M 1.2.6 Sequence L 1.2.7 小結 2.基于Vector驅動代碼的SPI配置 2.1 SPI引…

JavaScript:BOM編程

今天我要介紹的是JS中有關于BOM編程的知識點內容&#xff1a;BOM編程&#xff1b; 介紹&#xff1a;BOM全名&#xff08;Browser Object Model&#xff08;瀏覽器對象模型&#xff09;&#xff09;。 是瀏覽器提供的與瀏覽器窗口交互的接口&#xff0c;其核心對象是 window。與…