成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

InnoDB到底支不支持哈希索引,為啥不同的人說的不一樣?

開發 開發工具 MySQL
我在網上看到不同的資料,有的說InnoDB支持哈希索引,有的說不支持,到底哪個是正確的呢?

繼續回答水友提問(最近問MySQL的多):

沈老師,我在網上看到不同的資料,有的說InnoDB支持哈希索引,有的說不支持,到底哪個是正確的呢?

對于InnoDB的哈希索引,確切的應該這么說:

  • InnoDB用戶無法手動創建哈希索引,這一層上說,InnoDB確實不支持哈希索引;
  • InnoDB會自調優(self-tuning),如果判定建立自適應哈希索引(Adaptive Hash Index, AHI),能夠提升查詢效率,InnoDB自己會建立相關哈希索引,這一層上說,InnoDB又是支持哈希索引的;

那什么是自適應哈希索引(Adaptive Hash Index, AHI)呢?原理又是怎樣的呢?咱們先從一個例子開始。

不妨設有InnoDB數據表:t(id PK, name KEY, sex, flag)

畫外音:id是主鍵,name建了普通索引。

假設表中有四條記錄:

  • 1, shenjian, m, A
  • 3, zhangsan, m, A
  • 5, lisi, m, A
  • 9, wangwu, f, B

如上圖,通過前序知識,容易知道InnoDB在主鍵id上會建立聚集索引(Clustered Index),葉子存儲記錄本身,在name上會建立普通索引(Secondary Index),葉子存儲主鍵值。

發起主鍵id查詢時,能夠通過聚集索引,直接定位到行記錄。

  1. select * from t where name='ls'

發起普通索引查詢時:

  • 會先從普通索引查詢出主鍵(上圖右邊);
  • 再由主鍵,從聚集索引上二次遍歷定位到記錄(上圖左邊)。

不管聚集索引還是普通索引,記錄定位的尋路路徑(Search Path)都很長。

在MySQL運行的過程中,如果InnoDB發現,有很多SQL存在這類很長的尋路,并且有很多SQL會命中相同的頁面(page),InnoDB會在自己的內存緩沖區(Buffer)里,開辟一塊區域,建立自適應哈希所有AHI,以加速查詢。

從這個層面上來說,InnoDB的自使用哈希索引,更像“索引的索引”,畢竟其目的是為了加速索引尋路。

既然是哈希,key是什么,value是什么?

  • key是索引鍵值(或者鍵值前綴)。
  • value是索引記錄頁面位置。

為啥叫“自適應(adaptive)”哈希索引?

系統自己判斷“應該可以加速查詢”而建立的,不需要用戶手動建立,故稱“自適應”。

系統會不會判斷失誤,是不是一定能加速?

不是一定能加速,有時候會誤判。 當業務場景為下面幾種情況時:

  • 很多單行記錄查詢(例如passport,用戶中心等業務)
  • 索引范圍查詢(此時AHI可以快速定位首行記錄)
  • 所有記錄內存能放得下

AHI往往是有效的。

畫外音:任何脫離業務的技術方案,都是耍流氓。

當業務有大量like或者join,AHI的維護反而可能成為負擔,降低系統效率,此時可以手動關閉AHI功能。

一個小知識點,希望解答了這位水友的疑問。

知其然,知其所以然。

【本文為51CTO專欄作者“58沈劍”原創稿件,轉載請聯系原作者】

戳這里,看該作者更多好文

 

責任編輯:趙寧寧 來源: 51CTO專欄
相關推薦

2022-04-26 10:13:00

哈希索引MySQLInnoDB

2020-07-02 10:30:52

iPhone蘋果北斗

2012-03-07 17:24:10

戴爾咨詢

2012-12-20 10:17:32

IT運維

2017-05-25 15:02:46

聯宇益通SD-WAN

2016-05-09 18:40:26

VIP客戶緝拿

2015-10-19 12:33:01

華三/新IT

2025-04-03 08:21:18

2018-05-09 15:42:24

新零售

2009-02-04 15:43:45

敏捷開發PHPFleaPHP

2009-12-01 16:42:27

Gentoo Linu

2011-02-28 10:38:13

Windows 8

2009-06-12 15:26:02

2016-03-24 18:51:40

2015-08-04 14:49:54

Discover

2009-07-07 10:44:14

多態

2022-05-05 21:47:32

Linuxls 命令

2019-01-03 14:39:08

Oracle甲骨文ORACLE

2015-08-25 09:52:36

云計算云計算產業云計算政策

2013-01-11 18:10:56

軟件
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 99精品一级欧美片免费播放 | 欧美日韩在线观看一区二区三区 | 欧美一区二区三区在线观看 | 日韩中文字幕一区二区 | 精品久久久久久久久久 | 国产伦精品一区二区三毛 | 综合色久 | 亚洲精品在线免费播放 | 成人免费淫片aa视频免费 | 国产一区999 | 在线观看精品视频网站 | 天天人人精品 | 中文字幕成人av | 日韩一级免费电影 | 国产成人精品免费视频大全最热 | 午夜精品久久久久久久久久久久久 | 欧美一级二级在线观看 | 欧美一区二区三区大片 | 欧美久久久久 | 国产精品久久久精品 | 综合国产 | 成人二区 | 日本一区二区高清视频 | 欧美精品综合在线 | 亚洲精品女优 | 一级爱爱片 | 欧美一区二区三区在线看 | 国产精品久久久久久久久久久久午夜片 | 最新日韩欧美 | 超碰av免费| 国产精品一区在线 | 天天草夜夜骑 | 91精品国产乱码久久久久久久 | 成人在线免费观看 | 国产精品久久久久一区二区 | 福利片一区二区 | 亚洲精品国产成人 | 成人免费视频在线观看 | 亚洲精品一二三区 | 亚洲视频一区二区三区 | 国产真实精品久久二三区 |