MySQL中的自適應哈希索引

来源:https://www.cnblogs.com/lgjlife/archive/2019/03/08/10493496.html
-Advertisement-
Play Games

眾所周知,InnoDB使用的索引結構是B+樹,但其實它還支持另一種索引:自適應哈希索引。 哈希表是數組+鏈表的形式。通過哈希函數計算每個節點數據中鍵所對應的哈希桶位置,如果出現哈希衝突,就使用拉鏈法來解決。更多內容可以參考 百度百科-哈希表 從以上可以知道,哈希表查找最優情況下是查找一次.而Inno ...


眾所周知,InnoDB使用的索引結構是B+樹,但其實它還支持另一種索引:自適應哈希索引。

哈希表是數組+鏈表的形式。通過哈希函數計算每個節點數據中鍵所對應的哈希桶位置,如果出現哈希衝突,就使用拉鏈法來解決。更多內容可以參考 百度百科-哈希表

從以上可以知道,哈希表查找最優情況下是查找一次.而InnoDB使用的是B+樹,最優情況下的查找次數根據層數決定。因此為了提高查詢效率,InnoDB便允許使用自適應哈希來提高性能。

可以通過參數 innodb_adaptive_hash_index 來決定是否開啟。預設是打開的。

 
mysql> show variables like "innodb_adaptive_hash_index";
+----------------------------+-------+
| Variable_name              | Value |
+----------------------------+-------+
| innodb_adaptive_hash_index | ON    |
+----------------------------+-------+

存儲引擎會自動對個索引頁上的查詢進行監控,如果能夠通過使用自適應哈希索引來提高查詢效率,其便會自動創建自適應哈希索引,不需要開發人員或運維人員進行任何設置操作。

自適應哈希索引是對innodb的緩衝池的B+樹頁進行創建,不是對整張表創建,因此速度很快。

 

可以通過查看innodb的status來查看自適應哈希索引的使用情況。

mysql> show engine innodb  status \G
*************************** 1. row ***************************
  Type: InnoDB
  Name: 
Status: 
=====================================
2019-03-07 23:37:23 0x7f1f2d34c700 INNODB MONITOR OUTPUT
=====================================
Per second averages calculated from the last 6 seconds
------------------------------------------------------
INSERT BUFFER AND ADAPTIVE HASH INDEX
-------------------------------------
Ibuf: size 1, free list len 0, seg size 2, 0 merges
merged operations:
 insert 0, delete mark 0, delete 0
discarded operations:
 insert 0, delete mark 0, delete 0
Hash table size 34679, node heap has 0 buffer(s)
Hash table size 34679, node heap has 0 buffer(s)
Hash table size 34679, node heap has 0 buffer(s)
Hash table size 34679, node heap has 0 buffer(s)
Hash table size 34679, node heap has 0 buffer(s)
Hash table size 34679, node heap has 0 buffer(s)
Hash table size 34679, node heap has 0 buffer(s)
Hash table size 34679, node heap has 0 buffer(s)
0.00 hash searches/s, 0.00 non-hash searches/s
-------------------------------
END OF INNODB MONITOR OUTPUT
============================

可以看到自適應哈希索引大小,每秒的使用情況。

註意從哈希表的特性來看,自適應哈希索引只能用於等值查詢,範圍或者大小是不允許的。

等著查詢: select * from xx where name = "xxx";


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Linux常用命令 系統,內核等相關命令 命令 信息 備註 arch 顯示機器了處理機構 即查看機器是X86_64還是X86_32 等同於uname -m uname [- optional parameter] 顯示使用的系統 查看使用的是Linux,可選參數有 -a ,-r,-m cat /et ...
  • OS X 10.13之後,新的airdrop需要硬體支持,需要藍牙4.0 以及Wi-Fi 5GHz 開啟!!!!對於 OS X 10.12 以下的舊系統。即使是有線網路也可以使用,通過以下命令開啟有線網路下的airdrop:defaults write com.Apple.NetworkBrowse... ...
  • 最早知曉是 "之前C 中文版的github討論" 里提到了AppleScript有多語言版. 昨天想起, 覺得它畢竟是為數不多(僅有的?)大公司開發的非英語語法的編程語言, 不禁好奇它的前世今生. 於是作了一點調研. 網上相關資料不多, 最早的一本AppleScript專著"AppleScript ...
  • uniq -d是只列印重覆行 -u是只列印獨一無二的行文件A : abcd文件B: cdef取並集:A + B sort A B|uniq 取交集: sort A B|uniq -d 取差集:A - B sort A B B|uniq -u 取差集:B - A sort A B A|uniq -u ...
  • Linux下shell 的 ls 命令 這些命令不僅僅可以單獨使用也可結合起來使用,比如 ls -al, ls -at等,功能為他們各自的功能相且。 此篇博客參考《循序漸進Linux》,所有命令都是我自試過的,為了自己複習也為了讓更多的人瞭解shell的 ls 命令,若有錯誤的地方請指出,一定改正, ...
  • Docker 1、簡介 Docker是一個開源的應用容器引擎 將軟體編譯成一個鏡像;然後在鏡像里各種軟體做好配置,將鏡像發佈出去,其他的使用這就可以直接使用這個鏡像。運行中的這個鏡像叫做容器,容器啟動速度快,類似ghost操作系統,安裝好了什麼都有了; 2、Docker的核心概念 docker主機( ...
  • [TOC] 什麼是shell? 當談到命令時,我們實際上指的是 。 shell是一個接收由鍵盤輸入的命令,並將其傳遞給操作系統來執行的程式 。幾乎所有的Linux發行版都提供shell程式,該程式來自於稱之為bash的GNU項目。bash是Bourne Again Shell的首字母縮寫,Bourn ...
  • MySQL學習之路(一) 1.1MySQL的概述 MySQL由瑞典MySQL AB公司開發,目前屬於Oracle公司。 MySQL是一個開源的關係型資料庫管理系統。 MySQL分為社區版和企業版。 1.2MySQL的安裝與配置 1.2.1 安裝方式: msi(推薦)和zip; 1.2.2MySQL目 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...