精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

MySQL索引憑什么讓查詢效率提高這么多?

數據庫 MySQL
我相信大家在數據庫優化的時候都會說到索引,我也不例外,大家也基本上能對數據結構的優化回答個一二三,以及頁緩存之類的都能扯上幾句,但是有一次阿里P9的一個面試問我:你能從計算機層面開始說一下一個索引數據加載的流程么?

 [[340940]]

本文轉載自微信公眾號「三太子敖丙」,作者三太子敖丙。轉載本文請聯系三太子敖丙公眾號。

背景

我相信大家在數據庫優化的時候都會說到索引,我也不例外,大家也基本上能對數據結構的優化回答個一二三,以及頁緩存之類的都能扯上幾句,但是有一次阿里P9的一個面試問我:你能從計算機層面開始說一下一個索引數據加載的流程么?(就是想讓我聊IO)

我當場就去世了....因為計算機網絡和操作系統的基礎知識真的是我的盲區,不過后面我惡補了,廢話不多說,我們就從計算機加載數據聊起,講一下換個角度聊索引。

正文

MySQL的索引本質上是一種數據結構

讓我們先來了解一下計算機的數據加載。

磁盤IO和預讀:

 

先說一下磁盤IO,磁盤讀取數據靠的是機械運動,每一次讀取數據需要尋道、尋點、拷貝到內存三步操作。

尋道時間是磁臂移動到指定磁道所需要的時間,一般在5ms以下;

尋點是從磁道中找到數據存在的那個點,平均時間是半圈時間,如果是一個7200轉/min的磁盤,尋點時間平均是600000/7200/2=4.17ms;

拷貝到內存的時間很快,和前面兩個時間比起來可以忽略不計,所以一次IO的時間平均是在9ms左右。聽起來很快,但數據庫百萬級別的數據過一遍就達到了9000s,顯然就是災難級別的了。

 

考慮到磁盤IO是非常高昂的操作,計算機操作系統做了預讀的優化,當一次IO時,不光把當前磁盤地址的數據,而是把相鄰的數據也都讀取到內存緩沖區內,因為當計算機訪問一個地址的數據的時候,與其相鄰的數據也會很快被訪問到。

每一次IO讀取的數據我們稱之為一頁(page),具體一頁有多大數據跟操作系統有關,一般為4k或8k,也就是我們讀取一頁內的數據時候,實際上才發生了一次IO。

(突然想到個我剛畢業被問過的問題,在64位的操作系統中,Java中的int類型占幾個字節?最大是多少?為什么?)

那我們想要優化數據庫查詢,就要盡量減少磁盤的IO操作,所以就出現了索引。

索引是什么?

MySQL官方對索引的定義為:索引(Index)是幫助MySQL高效獲取數據的數據結構。

MySQL中常用的索引在物理上分兩類,B-樹索引和哈希索引。

本次主要講BTree索引。

BTree索引

BTree又叫多路平衡查找樹,一顆m叉的BTree特性如下:

  • 樹中每個節點最多包含m個孩子。
  • 除根節點與葉子節點外,每個節點至少有[ceil(m/2)]個孩子(ceil()為向上取整)。
  • 若根節點不是葉子節點,則至少有兩個孩子。
  • 所有的葉子節點都在同一層。
  • 每個非葉子節點由n個key與n+1個指針組成,其中[ceil(m/2)-1] <= n <= m-1 。

 

這是一個3叉(只是舉例,真實會有很多叉)的BTree結構圖,每一個方框塊我們稱之為一個磁盤塊或者叫做一個block塊,這是操作系統一次IO往內存中讀的內容,一個塊對應四個扇區,紫色代表的是磁盤塊中的數據key,黃色代表的是數據data,藍色代表的是指針p,指向下一個磁盤塊的位置。

來模擬下查找key為29的data的過程:

1、根據根結點指針讀取文件目錄的根磁盤塊1。【磁盤IO操作1次】

2、磁盤塊1存儲17,35和三個指針數據。我們發現17<29<35,因此我們找到指針p2。

3、根據p2指針,我們定位并讀取磁盤塊3。【磁盤IO操作2次】

4、磁盤塊3存儲26,30和三個指針數據。我們發現26<29<30,因此我們找到指針p2。

5、根據p2指針,我們定位并讀取磁盤塊8。【磁盤IO操作3次】

6、磁盤塊8中存儲28,29。我們找到29,獲取29所對應的數據data。

由此可見,BTree索引使每次磁盤I/O取到內存的數據都發揮了作用,從而提高了查詢效率。

但是有沒有什么可優化的地方呢?

我們從圖上可以看到,每個節點中不僅包含數據的key值,還有data值。而每一個頁的存儲空間是有限的,如果data數據較大時將會導致每個節點(即一個頁)能存儲的key的數量很小,當存儲的數據量很大時同樣會導致B-Tree的深度較大,增大查詢時的磁盤I/O次數,進而影響查詢效率。

B+Tree索引

B+Tree是在B-Tree基礎上的一種優化,使其更適合實現外存儲索引結構。在B+Tree中,所有數據記錄節點都是按照鍵值大小順序存放在同一層的葉子節點上,而非葉子節點上只存儲key值信息,這樣可以大大加大每個節點存儲的key值數量,降低B+Tree的高度。

 

B+Tree相對于B-Tree有幾點不同:

非葉子節點只存儲鍵值信息, 數據記錄都存放在葉子節點中, 將上一節中的B-Tree優化,由于B+Tree的非葉子節點只存儲鍵值信息,所以B+Tree的高度可以被壓縮到特別的低。

具體的數據如下:

InnoDB存儲引擎中頁的大小為16KB,一般表的主鍵類型為INT(占用4個字節)或BIGINT(占用8個字節),指針類型也一般為4或8個字節,也就是說一個頁(B+Tree中的一個節點)中大概存儲16KB/(8B+8B)=1K個鍵值(因為是估值,為方便計算,這里的K取值為〖10〗^3)。

也就是說一個深度為3的B+Tree索引可以維護10^3 * 10^3 * 10^3 = 10億 條記錄。(這種計算方式存在誤差,而且沒有計算葉子節點,如果計算葉子節點其實是深度為4了)

我們只需要進行三次的IO操作就可以從10億條數據中找到我們想要的數據,比起最開始的百萬數據9000秒不知道好了多少個華萊士了。

而且在B+Tree上通常有兩個頭指針,一個指向根節點,另一個指向關鍵字最小的葉子節點,而且所有葉子節點(即數據節點)之間是一種鏈式環結構。所以我們除了可以對B+Tree進行主鍵的范圍查找和分頁查找,還可以從根節點開始,進行隨機查找。

數據庫中的B+Tree索引可以分為聚集索引(clustered index)和輔助索引(secondary index)。

上面的B+Tree示例圖在數據庫中的實現即為聚集索引,聚集索引的B+Tree中的葉子節點存放的是整張表的行記錄數據,輔助索引與聚集索引的區別在于輔助索引的葉子節點并不包含行記錄的全部數據,而是存儲相應行數據的聚集索引鍵,即主鍵。

當通過輔助索引來查詢數據時,InnoDB存儲引擎會遍歷輔助索引找到主鍵,然后再通過主鍵在聚集索引中找到完整的行記錄數據。

 

不過,雖然索引可以加快查詢速度,提高 MySQL 的處理性能,但是過多地使用索引也會造成以下弊端:

  • 創建索引和維護索引要耗費時間,這種時間隨著數據量的增加而增加。
  • 除了數據表占數據空間之外,每一個索引還要占一定的物理空間。如果要建立聚簇索引,那么需要的空間就會更大。
  • 當對表中的數據進行增加、刪除和修改的時候,索引也要動態地維護,這樣就降低了數據的維護速度。

注意:索引可以在一些情況下加速查詢,但是在某些情況下,會降低效率。

索引只是提高效率的一個因素,因此在建立索引的時候應該遵循以下原則:

  • 在經常需要搜索的列上建立索引,可以加快搜索的速度。
  • 在作為主鍵的列上創建索引,強制該列的唯一性,并組織表中數據的排列結構。
  • 在經常使用表連接的列上創建索引,這些列主要是一些外鍵,可以加快表連接的速度。
  • 在經常需要根據范圍進行搜索的列上創建索引,因為索引已經排序,所以其指定的范圍是連續的。
  • 在經常需要排序的列上創建索引,因為索引已經排序,所以查詢時可以利用索引的排序,加快排序查詢。
  • 在經常使用 WHERE 子句的列上創建索引,加快條件的判斷速度。

現在大家知道索引為啥能這么快了吧,其實就是一句話,通過索引的結構最大化的減少數據庫的IO次數,畢竟,一次IO的時間真的是太久了。。。

總結

就面試而言很多知識其實我們可以很容易就掌握了,但是要以學習為目的,你會發現很多東西我們得深入到計算機基礎上才能發現其中奧秘,很多人問我怎么記住這么多東西,其實學習本身就是一個很無奈的東西,既然我們不能不學那為啥不好好學?去學會享受呢?最近我也在惡補基礎,后面我會開始更新計算機基礎和網絡相關的知識的。

責任編輯:武曉燕 來源: 三太子敖丙
相關推薦

2020-09-07 13:05:17

MySQL面試索引

2022-11-09 10:32:50

群業務群聊數據結構

2017-06-06 16:30:55

戴爾交付保障

2017-12-21 19:38:50

潤乾中間表

2022-07-26 23:43:29

編程語言開發Java

2010-10-25 10:55:11

Oracle函數索引

2013-01-15 09:41:45

編程語言

2019-01-31 10:15:14

群聊單聊消息

2024-04-02 08:41:10

ArrayListSubList場景

2017-08-11 14:21:33

軟件開發前端框架

2023-07-17 08:21:52

漏洞版本項目

2011-07-27 17:22:10

mysql極限測試索引

2020-08-20 14:04:34

日志MySQL磁盤

2016-12-01 13:40:37

2024-07-12 09:35:38

前端工具檢驗

2018-06-26 15:00:24

Docker安全風險

2023-11-13 08:49:54

2024-02-20 08:09:51

Java 8DateUtilsDate工具類

2012-07-06 09:00:34

MySQL

2018-12-21 09:36:31

OLAP蘇寧Druid
點贊
收藏

51CTO技術棧公眾號

青春草免费在线视频| av图片在线观看| 亚洲国产欧美在线观看| 亚洲午夜免费电影| 欧美一级爽aaaaa大片| 中文在线资源天堂| 国产精品多人| 亚洲深夜福利视频| 无套内谢丰满少妇中文字幕| av成人 com a| 国产精品少妇自拍| 91嫩草免费看| 青青国产在线视频| 欧美激情 亚洲a∨综合| 国产视频精品免费播放| 中文字幕第66页| 高清不卡亚洲| 一区二区三区中文在线观看| 免费看成人av| 精品人妻一区二区三区麻豆91 | 亚洲精品一区av| 亚洲成人一区二区在线观看| 亚洲欧洲精品在线观看| 手机看片1024日韩| 国产盗摄视频一区二区三区| 国产成人免费av| 国产一级做a爱免费视频| 日韩国产一区| 亚洲色图第三页| 在线看黄色的网站| 国产精品一站二站| 欧美在线视频你懂得| 精品少妇人妻av免费久久洗澡| 日本高清视频在线观看| 久久久久国产精品麻豆ai换脸| 91在线播放视频| 91久久国语露脸精品国产高跟| 免费看黄裸体一级大秀欧美| 久久久久久这里只有精品| 日韩精品一区二区亚洲av性色| 精品久久视频| 亚洲深夜福利网站| 国产精久久一区二区三区| 欧美性生活一级片| 亚洲国产黄色片| 久久久久久久久久久久国产精品| 9999精品免费视频| 欧美巨大另类极品videosbest | 91国产精品视频在线观看| 欲香欲色天天天综合和网| 亚洲午夜精品久久久久久久久| 日本美女爱爱视频| 在线xxxx| 亚洲永久免费av| 久久综合亚洲精品| 七七成人影院| 亚洲国产wwwccc36天堂| 久久久久久免费看| xxxx在线视频| 性做久久久久久免费观看 | 欧美在线视频第一页| 日韩国产欧美| 久久亚洲春色中文字幕| 成人免费毛片xxx| 欧美日韩福利| 亚洲91精品在线| 伦av综合一区| 蜜臀av一区二区| 亚洲一区二区三区乱码aⅴ| 国产ts变态重口人妖hd| 国产999精品久久久久久绿帽| 亚洲自拍另类欧美丝袜| 欧日韩在线视频| 久久这里只有精品6| 水蜜桃一区二区| 黄色片网站在线观看| 亚洲免费观看高清完整| 91精品国产毛片武则天| 黄色小说在线播放| 欧美性xxxxxx| xx欧美撒尿嘘撒尿xx| 国产精品亚洲四区在线观看 | a级大片免费看| a级日韩大片| 亚洲欧美日韩国产中文专区| 美国黑人一级大黄| 小处雏高清一区二区三区| 欧美激情xxxxx| 国产精品免费精品一区| 九一九一国产精品| 国产一区二区精品在线| 成人在线免费观看| 一区二区三区欧美视频| 国产二区视频在线播放| 亚洲一区有码| 精品一区二区三区电影| 三上悠亚在线观看视频| 136国产福利精品导航网址| 热re99久久精品国产66热| 一级黄色片在线播放| 成人听书哪个软件好| 色综合666| 123区在线| 欧美日韩精品免费| 欧美性xxxx图片| 亚洲视频电影在线| 国产97色在线| 国产91免费看| 亚洲欧洲日产国产综合网| 久久久亚洲精品无码| 超碰国产精品一区二页| 亚洲国产免费av| 91高清免费观看| 日日摸夜夜添夜夜添国产精品| 91国产在线播放| 亚洲麻豆精品| 日韩欧美成人区| 精品久久久久一区二区| 99精品综合| 国产精品va在线| 青青操在线视频| 亚洲高清免费视频| 亚洲天堂av一区二区三区| 欧美色资源站| 国内精品久久久久久影视8| 国产精品久久影视| 中文字幕欧美区| 午夜精品久久久内射近拍高清| 凹凸成人在线| 九九综合九九综合| 97在线视频人妻无码| 国产日韩精品一区二区三区| aa在线观看视频| 成人爽a毛片免费啪啪红桃视频| www.日韩.com| 一级爱爱免费视频| 国产精品色噜噜| 热久久精品免费视频| 亚洲区小说区图片区qvod按摩| 欧美精品videossex性护士| 国产三级伦理片| 国产精品国产精品国产专区不片| www.天天射.com| 国产亚洲一卡2卡3卡4卡新区| 欧美亚洲日本黄色| 天堂视频中文在线| 欧美性猛交xxxx乱大交| 日b视频在线观看| 999在线观看精品免费不卡网站| 电影午夜精品一区二区三区| 色呦呦在线观看视频| 日韩免费在线观看| 免费在线观看黄视频| 国产成都精品91一区二区三| 国产高清不卡无码视频| 亚洲国产高清在线观看| 色综合久久精品亚洲国产 | 亚洲美女性视频| 国产午夜精品久久久久| 国产午夜精品美女毛片视频| 日本成人中文字幕在线| 国产成人一区| 国产在线精品播放| 2024最新电影免费在线观看| 日韩精品在线网站| 日本中文字幕免费观看| 久久一区二区三区国产精品| 激情五月开心婷婷| 精品国产aⅴ| 国产欧美va欧美va香蕉在线| 国产成人午夜| 亚洲成人性视频| 国产又大又黄又粗| 国产精品美女一区二区三区| 中文字幕日韩久久| 99在线|亚洲一区二区| 欧洲国产精品| 国产精品1区| 91国产一区在线| 91美女视频在线| 欧美成人免费网站| 在线观看日本视频| 亚洲视频一区二区在线观看| 岛国av免费观看| 天堂久久久久va久久久久| 日韩欧美亚洲v片| 久久的色偷偷| 欧洲永久精品大片ww免费漫画| 91高清在线视频| 欧美精品一区二区久久婷婷| 久久精品视频1| 亚洲色图另类专区| 巨胸大乳www视频免费观看| 免费看欧美美女黄的网站| 欧美黄网在线观看| 欧美女王vk| 不卡一区二区三区视频| 天天综合网站| 久久久久久欧美| 免费看a在线观看| 日韩电视剧在线观看免费网站| 亚洲午夜无码久久久久| 亚洲高清一区二区三区| 国产jizz18女人高潮| 99久久精品久久久久久清纯| 日韩av.com| 午夜在线视频观看日韩17c| 日韩国产精品毛片| 精品国产一区二区三区四区| 国产精选在线观看91| 久久影视精品| 日韩免费黄色av| 阿v视频在线| 久久亚洲成人精品| 日韩伦理在线观看| 亚洲欧美日韩区| 天天爱天天干天天操| 日韩午夜中文字幕| 夜夜嗨av禁果av粉嫩avhd| 日韩欧美在线一区| 日韩欧美三级在线观看| 亚洲激情五月婷婷| 夫妇露脸对白88av| 久久久久国产精品免费免费搜索| 精品少妇人妻av一区二区三区| 国内精品在线播放| 亚洲这里只有精品| 日韩va亚洲va欧美va久久| 波多野结衣家庭教师在线| 欧美视频在线观看| www.激情网| 亚洲精品中文字幕乱码| 亚洲欧美久久234| 成人无号精品一区二区三区| 久久综合入口| 一区二区小说| 欧美xxxx黑人又粗又长精品| 秋霞综合在线视频| 国产亚洲情侣一区二区无 | 日韩精品第一页| 精品国产成人| 三级三级久久三级久久18| 深爱激情综合网| 日韩一区免费观看| 日韩国产一区二区| 亚洲图片都市激情| 999精品在线| 在线精品日韩| 欧美影视一区| 国产自产在线视频| 亚洲青色在线| 欧美爱爱视频免费看| 国产一区导航| 亚洲色精品三区二区一区| 日韩二区三区在线观看| 午夜宅男在线视频| 精一区二区三区| 超级砰砰砰97免费观看最新一期 | 欧美家庭影院| 久久久久久亚洲精品中文字幕 | 欧美日韩一区二区三区四区在线观看| 国产av第一区| 日韩五码在线| 激情内射人妻1区2区3区| 蜜桃精品在线观看| 中文字幕avav| 91亚洲大成网污www| 国产美女免费无遮挡| 国产精品久久久久婷婷| 老湿机69福利| 欧美日韩国产在线看| 中文字幕手机在线视频| 在线不卡a资源高清| 亚洲成人av综合| 亚洲欧美999| 黄色一级大片在线免费看产| 欧美激情2020午夜免费观看| 台湾佬中文娱乐久久久| 国产日韩专区在线| 久久365资源| 亚洲成人a**址| 午夜视频一区| 热久久精品免费视频| 国产麻豆一精品一av一免费| 玖草视频在线观看| 国产精品乱码一区二三区小蝌蚪| 天天干中文字幕| 色香色香欲天天天影视综合网| 国产精品久久欧美久久一区| 亚洲精品狠狠操| 成人免费看片| 欧美综合第一页| 精品国产欧美| 日本电影一区二区三区| 欧美1区视频| 国产三级三级三级看三级| 国产sm精品调教视频网站| 蜜桃传媒一区二区亚洲| 亚洲伊人色欲综合网| 精品乱码一区内射人妻无码| 欧美videos大乳护士334| 成人免费在线电影| 久久久久久久久久久成人| 国产精品第一| 蜜桃av噜噜一区二区三| 你懂的国产精品永久在线| 99视频在线免费| 不卡一二三区首页| 欧美做爰爽爽爽爽爽爽| 在线观看国产精品网站| 欧洲成人一区二区三区| 欧美精品免费看| 精品久久99| 欧美在线日韩精品| 国产综合欧美| 天天综合成人网| 中文字幕精品一区二区精品绿巨人 | www.com在线观看| 中文字幕一精品亚洲无线一区| 日本黄色免费在线| 国产一区二区高清不卡| 欧美日本中文| 99精品视频免费版的特色功能| 欧美高清在线精品一区| 特级毛片www| 精品视频久久久久久久| 草草在线视频| 国产一区二区中文字幕免费看| 欧美激情五月| 不卡的在线视频| 国产精品久久久久久亚洲伦| 国产女主播喷水视频在线观看 | 欧美日韩午夜视频| 欧美日韩大陆在线| aaa在线观看| 国产精品久久久久久亚洲影视| 偷拍亚洲色图| 男人操女人免费软件| 91网站视频在线观看| 国内自拍视频在线播放| 亚洲美女久久久| av综合电影网站| 欧美日韩一区综合| 久久午夜激情| 国产在线综合视频| 欧美日韩在线不卡| 中文字幕日本在线观看| 国产美女扒开尿口久久久| 91视频久久| 亚洲第一成肉网| 亚洲激情中文1区| 亚洲国产精品欧美久久| 久久免费国产视频| 偷拍精品福利视频导航| 欧美丰满熟妇xxxxx| 欧美高清在线一区| 国产美女精品视频国产| 欧美激情一级二级| 免费成人蒂法| 中文字幕无码不卡免费视频| 中文字幕av不卡| 99国产精品久久久久久久成人| 欧美日韩xxx| 日本成人中文| 亚洲天堂网一区| 亚洲色图欧美偷拍| 天天干免费视频| 国产精品福利网| 97精品国产福利一区二区三区| 在线观看免费视频污| 亚洲va天堂va国产va久| 久久精品蜜桃| 成人黄在线观看| 激情视频一区| 妺妺窝人体色WWW精品| 91精品国产欧美一区二区18| 波多野结衣久久| 欧美亚洲丝袜| 国产一区二区三区日韩| 国产午夜久久久| 一区三区二区视频| 日本一区二区三区播放| 国产精品50p| 国产精品国产三级国产aⅴ入口| 狠狠综合久久av一区二区| 日韩免费在线播放| 欧美欧美全黄| 天天躁夜夜躁狠狠是什么心态| 欧美一区二区人人喊爽| 日韩伦理在线| 亚洲AV无码成人精品一区| 99re这里只有精品6| 97人妻人人澡人人爽人人精品| 性色av一区二区三区| 国产精品成久久久久| 性久久久久久久久久| 日韩一级在线观看| 国产亚洲一区二区手机在线观看| 日韩精品久久一区二区| 国产人伦精品一区二区|