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

面試官問我索引為什么這快?我好像解釋不清楚了

運維 數據庫運維
在數據庫中加一定量的索引,會讓你的查詢語句,從原來的 3 秒縮短到零點幾秒的程度,但是很多人都不知道為什么要加索引,為什么加了索引之后,你的查詢語句就會起飛呢?今天阿粉來聊一下索引。

阿粉相信大家肯定都知道,在數據庫中加一定量的索引,會讓你的查詢語句,從原來的 3 秒縮短到零點幾秒的程度,但是很多人都不知道為什么要加索引,為什么加了索引之后,你的查詢語句就會起飛呢?今天阿粉來聊一下索引。

索引的類型(常見的)

  • 主鍵索引(primary key):主鍵索引這個阿粉從剛開始接觸開發的時候,就被各種灌輸,表的主鍵就默認是索引,不允許出現空值。
  • 普通索引(index/normal):MySQL中基本索引類型,沒有什么限制,允許在定義索引的列中插入重復值和空值。
  • 全文索引(fulltext):只能在文本類型CHAR,VARCHAR,TEXT類型字段上創建全文索引。MyISAM和InnoDB中都可以使用全文索引。
  • 唯一索引(unique):索引列中的值必須是唯一的,但是允許為空值。

索引的類型肯定不限制于這幾項,既然我們知道分類了,我們接下來再來看看不同索引的創建方式。

不同索引的創建方式

其實如果你真的不會去寫 SQL 去創建索引,最簡單的,Navicat 你總是會用的吧,圖形化的界面操作,你肯定也是了解的吧,那圖形化直接操作不就好了。

這樣子操作是不是簡單明了,選擇你想要創建索引的類型,然后指名你想要創建索引的字段,最后再給他加上個注釋,完美解決,但是我們還是要寫語句來看一下的。

1. 創建普通的索引

  1. ALTER TABLE table_name ADD INDEX index_name (column) 

比如我們有一張表叫做 user 我們想給 user 表中的一個叫做 phone 字段增加一個索引,應該怎么去寫呢?

  1. ALTER TABLE user ADD INDEX phoneIndex (phone) 

這時候我們就創建好了一個索引了,索引的刪除,相對來說也是非常的簡單。其實說是創建索引,實際上就是給我們原有表中的某個字段上增加一個索引,這個大家一定得清楚哈,千萬別和 Create 給搞混了。下面阿粉就直接簡單的給大家稱之為創建吧。

  1. ALTER TABLE testalter_tb1 DROP INDEX index_name 

這樣刪除我們剛才建立的索引就是

  1. ALTER TABLE user DROP INDEX phoneIndex 

這時候我們就能看到刪除成功了。

  1. > OK 
  2. > 時間: 0.012s 

2. 創建唯一索引(unique)并刪除

  1. ALTER TABLE user ADD unique phoneIndex (phone) 
  2. ALTER TABLE user DROP INDEX phoneIndex; 

千萬不要想當然的認為創建的時候我指定了索引的類型,然后刪除的時候也執行一個 ALTER TABLE user DROP unique phoneIndex; 阿粉親身實踐,確實是不成功的。

3. 創建主鍵索引(primary key)并刪除

  1. ALTER TABLE user ADD PRIMARY KEY (phone): 
  2. ALTER TABLE user DROP PRIMARY KEY 

一般我們在建表的時候,都把這個主鍵索引都建好了,所以使用的場景并不是很多見。

4. 創建全文索引(fulltext)并刪除

創建方式都差不多就是這樣

  1. ALTER TABLE user ADD FULLTEXT phoneIndex (phone) 
  2. ALTER TABLE user DROP INDEX phoneIndex; 

既然我們了解了創建的方式了,那是不是該回歸正題,說說為什么使用索引就會快,這就得涉及到索引的底層知識了,

索引的實現

在沒有索引的情況下,我們查找數據只能按照從頭到尾的順序逐行查找,每查找一行數據,意味著我們要到到磁盤相應的位置去讀取一條數據。

如果把查詢一條數據分為到磁盤中查詢和比對查詢條件兩步的話,到磁盤中查詢的時間會遠遠大于比對查詢條件的時間,這意味著在一次查詢中,磁盤io占用了大部分的時間。更進一步地說,一次查詢的效率取絕于磁盤io的次數,如果我們能夠在一次查詢中盡可能地降低磁盤io的次數,那么我們就能加快查詢的速度。

所以我們就要開始引入索引,然后分析索引底層是如何實現查找迅速的。

實際上索引的底層實際上就是樹,也就 B 樹和 B+ 樹,也可以稱之為變種的 B+ 樹。大家也都知道 Mysql中最常用的引擎像InnoDB和MyISAM,最終都選擇了B+樹作為索引。

那我們來說說這個B樹和B+樹。

B-樹,也稱為B樹,是一種平衡的多叉樹(可以對比一下平衡二叉查找樹),它比較適用于對外查找。

畫一個二階B樹:

二階B樹

那么我們為什么稱他為二階 B 樹呢?這個階數實際上就是說一個 節點 最多有幾個 子節點。

我們上面的圖,X元素,有2個子節點,A 元素,又有2個 子節點 C 和 D ,而 B 元素,又有 2 個子節點 E F ,也就是說一個節點最多有多少個子節點,我們就稱它為幾階的樹,通常這個值一般用 m 來表示。

注意我們所說的,也就是一個節點上 最多 的子節點數,如果有一個分支是有三個節點,而有一個是 兩個節點 ,那我們就稱它為 三階 B 樹。

一顆m階的 B 樹 要滿足什么條件呢?

  • 每個節點至多可以擁有m棵子樹。
  • 根節點,只有至少有2個節點(要么極端情況,就是一棵樹就一個根節點,單細胞生物,即是根,也是葉,也是樹)。
  • 非根非葉的節點至少有的Ceil(m/2)個子樹(Ceil表示向上取整,圖中3階B樹,每個節點至少有2個子樹,也就是至少有2個叉)。
  • 非葉節點中的信息包括[n,A0,K1,A1,K2,A2,…,Kn,An],,其中n表示該節點中保存的關鍵字個數,K為關鍵字且Ki
  • 從根到葉子的每一條路徑都有相同的長度,也就是說,葉子節點在相同的層,并且這些節點不帶信息,實際上這些節點就表示找不到指定的值,也就是指向這些節點的指針為空。

B樹的查詢過程和二叉排序樹比較類似,從根節點依次比較每個節點,因為每個節點中的關鍵字和左右子樹都是有序的,所以只要比較節點中的關鍵字,或者沿著指針就能很快地找到指定的關鍵字,如果查找失敗,則會返回葉子節點,即空指針。

B樹搜索的簡單偽算法如下:

  1. BTree_Search(node, key) { 
  2.     if(node == null) return null; 
  3.     foreach(node.key) 
  4.     { 
  5.         if(node.key[i] == key) return node.data[i]; 
  6.             if(node.key[i] > key) return BTree_Search(point[i]->node); 
  7.     } 
  8.     return BTree_Search(point[i+1]->node); 
  9.  
  10. data = BTree_Search(root, my_key); 

這就是個偽算法,寫的不好,大家見諒,那么什么是 B+ 樹呢?

B+ 樹是一種樹數據結構,是一個n叉樹,每個節點通常有多個孩子,一顆B+樹包含根節點、內部節點和葉子節點。根節點可能是一個葉子節點,也可能是一個包含兩個或兩個以上孩子節點的節點。

B+ 樹通常用于數據庫和操作系統的文件系統中。

NTFS, ReiserFS, NSS, XFS, JFS, ReFS 和BFS等文件系統都在使用B+樹作為元數據索引。

B+ 樹的特點是能夠保持數據穩定有序,其插入與修改擁有較穩定的對數時間復雜度。

B+ 樹元素自底向上插入。

那 B+ 樹又有哪些比較顯著的特點呢?

  • 每個父節點的元素都出現在了子節點中,分別是子節點最大或者最小的元素。
  • 在上面的這一棵樹中,根節點元素8是子節點258的最大的元素,根元素15也是。這時候要注意了,根節點最大的元素等同于整個B+樹的最大的元素,以后無論是怎么插入或者是刪除,始終都要保持最大的元素在根節點中。
  • 葉子節點,因為父節點的元素都出現在了子節點當中,因此所有的葉子節點包含了全量的元素信息。

B+樹與B樹差異

  • 有k個子節點的節點必然有k個元素
  • 非葉子節點僅具有索引作用,跟記錄有關的信息均存放在葉子節點中
  • 樹的所有葉子節點構成一個有序鏈表,可以按照元素排序的次序遍歷全部記錄
  • B樹和B+樹的區別在于,B+樹的非葉子節點只包含導航信息,不包含實際的值,所有的葉子節點和相連的節點使用鏈表相連,便于區間查找和遍歷。

說到這里,就會有讀者開始想,說了半天,沒有說到重點,為什么加了索引就快呢?

剛才阿粉也說了,數據庫讀取數據,是從磁盤上通過 IO 來進行數據的操作,一次磁盤IO操作可以取出物理存儲中相鄰的一大片數據,如果查詢的索引數據(就是B+樹中從根節點一直到葉子節點整個過程中查詢的節點數)都集中在該區域,那么只需要一次磁盤IO,否則就需要多次磁盤IO。

這么說是不是就相對的簡單明了了。

再舉出一個簡單的例子:

比如我們想要查詢 user 表中 name 為 xiaohong 的數據,在我們寫 SQL 的時候

  1. select * from user where name = 'xiaohong' 

這時候沒有索引的情況下,數據庫直接就把整個表全部掃描一遍,然后去找 name = ‘xiaohong’ 的數據

而我們給他加上索引之后,會通過索引查找去查詢名為 ‘xiaohong‘ 的數據,因為該索引已經按照字母順序排列,因此要查找名為 ‘xiaohong' 的記錄時會快很多。

大家明白了么?就像是一個詞典,我把 x 開頭的數據都給你羅列出來,然后你從 x 開頭的數據中去尋找,和你直接沒有任何處理,直接一頁一頁的翻詞典的速度,哪一個更快,相信大家也都明白了吧。

 

責任編輯:趙寧寧 來源: Java極客技術
相關推薦

2025-05-12 08:40:00

前端監控DOM

2024-11-04 00:00:03

viewportDOMSPA

2021-12-02 08:19:06

MVCC面試數據庫

2021-01-21 07:53:29

面試官Promis打印e

2020-04-16 08:22:11

HTTPS加解密協議

2022-04-10 18:10:24

CURD鏈表

2022-10-09 08:38:17

消息隊列面試官模式

2020-09-10 16:10:17

js繼承模式前端

2023-06-05 07:57:53

Kafka消息事務消息

2020-12-01 11:50:49

數據庫Redis面試

2021-12-20 10:30:33

forforEach前端

2021-11-15 09:32:06

浮點面試Java

2025-06-18 08:20:00

Redis數據庫線程

2021-08-28 09:06:11

Dubbo架構服務

2022-10-17 00:04:30

索引SQL訂單

2020-12-03 07:39:50

HashMap底層數據

2021-06-03 08:55:54

分布式事務ACID

2025-11-03 16:30:44

2021-11-24 10:10:32

axios前端攔截器

2021-05-08 07:53:33

面試線程池系統
點贊
收藏

51CTO技術棧公眾號

亚洲视频在线看| 亚洲一区二区三区美女| 国产精品91视频| 99鲁鲁精品一区二区三区| 超碰在线一区| 日本韩国一区二区三区| 中文字幕免费高| 五月天久久久久久| 久久国产乱子精品免费女| 欧美区在线播放| 国产人妻大战黑人20p| 亚洲久草在线| 色婷婷一区二区| 国内自拍中文字幕| 国产黄在线观看免费观看不卡| 激情综合色播五月| 国产suv精品一区二区| 欧美三级在线免费观看| 国产欧美日韩一区二区三区四区| 日韩欧美在线123| 天堂在线资源视频| 中文在线аv在线| 亚洲自拍另类综合| 杨幂一区欧美专区| 蜜桃免费在线| 99麻豆久久久国产精品免费| 成人做爽爽免费视频| 日韩综合在线观看| 一本久道综合久久精品| 免费97视频在线精品国自产拍| 亚洲av无码一区二区三区人| 国产精品久久久久久久久久白浆| 在线成人av网站| 久久精品免费网站| 午夜激情电影在线播放| 亚洲综合丝袜美腿| 蜜臀av.com| 毛片在线播放a| 国产精品三级av在线播放| 就去色蜜桃综合| 午夜视频福利在线观看| 成人丝袜高跟foot| 国产富婆一区二区三区| 国产jzjzjz丝袜老师水多| 蜜桃91丨九色丨蝌蚪91桃色| 国产精品福利网| 亚洲精品一区二三区| 久久经典综合| 国产91在线播放九色快色| 日韩av大片在线观看| 亚洲成色精品| 66m—66摸成人免费视频| 日韩污视频在线观看| 尹人成人综合网| 97精品国产97久久久久久免费| 免费一级a毛片夜夜看| 欧美二区视频| 欧美激情亚洲一区| 日韩成年人视频| 亚洲伊人网站| 国产精品1区2区在线观看| 天堂免费在线视频| 久久99精品久久只有精品| 国产日韩欧美综合| 国产偷拍一区二区| 成人综合婷婷国产精品久久免费| 成人在线免费网站| 香蕉人妻av久久久久天天| 91丨九色丨黑人外教| 日本一区视频在线| 免费大片在线观看www| 亚洲精品第一国产综合野| 99在线免费视频观看| 一区二区三区电影大全| 在线精品国精品国产尤物884a| 三级a在线观看| 国产精选久久| 亚洲第一福利在线观看| 手机av免费看| 97精品视频在线看| 色综合久久天天综线观看| 日韩字幕在线观看| 日日摸夜夜添夜夜添国产精品| 国产欧美精品在线播放| www日本视频| 久久亚洲一级片| 亚洲午夜高清视频| 黄色成人在线网| 色av一区二区| 成人高清在线观看视频| 色天下一区二区三区| 色妞久久福利网| 国产无码精品视频| 美女一区二区视频| 国产美女精品在线观看| 成人亚洲综合天堂| 亚洲一区二区视频在线观看| 久草精品在线播放| 精品国产三级| 亚洲一区二区久久久| 视频这里只有精品| 久久九九99| 粉嫩av免费一区二区三区| 激情小视频在线观看| 亚洲欧美区自拍先锋| 男人操女人逼免费视频| 精品亚洲a∨一区二区三区18| 日韩精品欧美国产精品忘忧草| 日韩av手机在线免费观看| 亚洲欧美日韩视频二区| 亚洲伊人第一页| 国产区高清在线| 午夜精品久久久久| www.日本久久| 久久视频在线| 91高清视频免费| www.97超碰| 中文字幕在线不卡| 午夜激情福利在线| 亚洲人亚洲人色久| 韩国美女主播一区| 亚洲av无码片一区二区三区| 中文字幕的久久| 欧美日韩亚洲第一| 国产毛片精品| 欧美日韩福利在线观看| 国产露脸91国语对白| 国产丝袜欧美中文另类| a√天堂在线观看| 精品无人区一区二区| 久久国产加勒比精品无码| 欧美日韩 一区二区三区| 99久久精品国产精品久久 | 自拍偷拍一区| 97精品视频在线观看| 精品人妻午夜一区二区三区四区| 中文字幕精品—区二区四季| 激情综合在线观看| 欧美日韩一本| 国产91对白在线播放| 空姐吹箫视频大全| 亚洲国产日韩a在线播放| www.黄色网| 狠狠88综合久久久久综合网| 91中文字精品一区二区| 色呦呦在线播放| 欧美精品一区二区三| 成人免费看片98| 成人动漫一区二区在线| 日韩欧美不卡在线| 国产精品久av福利在线观看| 国自产精品手机在线观看视频| 亚洲精品久久久蜜桃动漫| 亚洲国产视频一区| 白嫩情侣偷拍呻吟刺激| 99精品国产在热久久| 久久久久久久久一区| 成人爱爱网址| 一本色道久久综合亚洲精品小说| 性高潮视频在线观看| 一色屋精品亚洲香蕉网站| а 天堂 在线| 伊人久久亚洲热| 欧洲久久久久久| 欧美高清xxx| 欧美成人免费全部| 无码国产色欲xxxx视频| 91电影在线观看| 999福利视频| 国产精品123区| 日本一道本久久| 色综合综合网| 91久久嫩草影院一区二区| 在线不卡日本v二区707| 精品99999| 五月婷婷激情五月| 一区二区三区四区av| 中文字幕影片免费在线观看| 久久亚洲美女| 国产又大又长又粗又黄| 加勒比色老久久爱综合网| 国产精品久久久久久久久久| 国产乱色在线观看| 欧美精品一区在线观看| 高潮毛片又色又爽免费 | 日本美女久久| 欧美精品在线免费| 手机看片福利在线观看| 欧美精品xxxxbbbb| 伊人久久综合视频| 国产精品丝袜黑色高跟| 亚洲视频天天射| 日韩av成人高清| 老司机激情视频| 成人高清电影网站| 国产厕所精品在线观看| jizz免费一区二区三区| 久久久久久久久爱| 91精彩视频在线观看| 日韩午夜在线影院| 四虎影院在线免费播放| 亚洲一区二区三区四区五区中文| 国产在线综合视频| 波多野结衣一区二区三区| 蜜臀av免费观看| 国产视频亚洲| 日本国产中文字幕| 久久久影院免费| 欧美激情专区| 国产精品极品| 91gao视频| 少妇高潮一区二区三区99| 欧美尤物巨大精品爽| 天堂av最新在线| 日韩最新中文字幕电影免费看| 天堂a中文在线| 精品国产亚洲在线| 97人妻精品一区二区三区动漫| 日韩欧美在线观看| 日干夜干天天干| 夜夜揉揉日日人人青青一国产精品| 一级在线观看视频| 久久久久久久性| 国产黑丝一区二区| 国产成人亚洲精品青草天美| 最新国产黄色网址| 七七婷婷婷婷精品国产| 亚洲人成色77777| 亚洲一区二区三区高清| 婷婷无套内射影院| 激情视频一区| 无码av天堂一区二区三区| 欧美在线观看天堂一区二区三区| 亚洲综合av一区| 久久一本综合| 一区二区免费在线观看| 成人在线亚洲| 亚洲午夜精品一区二区三区| japanese国产精品| 三区精品视频| 欧洲美女日日| 神马一区二区影院| 精品久久精品| 一本一道久久a久久精品综合| 不卡视频在线| 亚洲一区二区三区欧美| 日韩一区二区在线| 日本福利视频导航| 欧美aa国产视频| www.日本三级| 国产精品试看| 一本色道无码道dvd在线观看| 久久狠狠一本精品综合网| 国产成人手机视频| 捆绑变态av一区二区三区| 超碰人人草人人| 国产福利精品一区| 又黄又爽的网站| 久久亚洲春色中文字幕久久久| 中文字幕免费视频| 18欧美亚洲精品| 九九精品在线观看视频| 香蕉乱码成人久久天堂爱免费| 日本一级淫片免费放| 欧美午夜丰满在线18影院| 波多野结衣视频网址| 欧美高清激情brazzers| 亚洲精品无码久久久| 日韩电影免费在线观看中文字幕| 欧美偷拍视频| 色噜噜狠狠狠综合曰曰曰| huan性巨大欧美| 91av在线不卡| 偷拍自拍亚洲| 国产欧美亚洲日本| 欧美色图国产精品| 欧美黄网在线观看| 久久国产精品99国产| 免费成年人高清视频| 成人av午夜电影| 国产人妻大战黑人20p| 一区二区三区四区视频精品免费| 在线观看黄网站| 欧美美女喷水视频| 欧美一区二区三区激情| 国产一区二区三区在线观看网站| 日本视频在线观看| 97免费在线视频| 日韩成人综合网| 狠狠色伊人亚洲综合网站色| 欧美午夜精彩| 九九九九免费视频| 国产中文字幕一区| 波多野结衣片子| 亚洲综合无码一区二区| 中文字幕一区二区三区波野结| 精品国产伦一区二区三区免费 | 久久精品成人欧美大片古装| 国产后进白嫩翘臀在线观看视频 | 97超碰在线视| 日本不卡高清视频| 中国极品少妇videossexhd| 国产精品伦理一区二区| 国产无套粉嫩白浆内谢| 欧美日韩视频在线观看一区二区三区| 人妻va精品va欧美va| 久久九九国产精品怡红院| 视频在线日韩| 久精品国产欧美| 综合天堂久久久久久久| 一级在线免费视频| 久久久久久99精品| 国产午夜福利精品| 日韩欧美国产麻豆| 巨大荫蒂视频欧美大片| 国产成人综合亚洲| 日韩激情网站| 精品无码国产一区二区三区av| 国产一区二区免费在线| 亚洲毛片亚洲毛片亚洲毛片| 欧美视频中文在线看| 色呦呦中文字幕| 欧美福利小视频| 亚洲日本va午夜在线电影| 波多野结衣激情| 美女一区二区三区在线观看| 性少妇bbw张开| 岛国精品视频在线播放| 亚洲国产视频一区二区三区| 久久资源免费视频| av在线国产精品| 一本久道久久综合| 久久99热国产| 一本在线免费视频| 欧美日韩午夜在线| 午夜在线播放| 成人妇女免费播放久久久| 日韩久久电影| 成人日韩在线视频| **欧美大码日韩| 国产强伦人妻毛片| 久久影院资源网| 精品国产亚洲一区二区在线观看 | 国产精品12| 亚洲午夜电影| 久久久久亚洲无码| 狠狠色狠狠色综合日日小说| 神马午夜一区二区| 51精品在线观看| 精品一区免费| 午夜宅男在线视频| 成人欧美一区二区三区1314| 国产免费久久久| 色综合久久久888| 欧美顶级毛片在线播放| 精品中文字幕av| 久久久国产精品不卡| 最新国产中文字幕| 久久精品青青大伊人av| 中文字幕一区图| 精品人妻一区二区三区四区在线 | 欧美精品人人做人人爱视频| 欧美亚洲三区| 国产性猛交xx乱| 日韩一区二区精品在线观看| 啦啦啦中文在线观看日本| 国产偷久久久精品专区| 午夜在线a亚洲v天堂网2018| 欧洲av一区二区三区| 欧美一区午夜视频在线观看 | 国产91精品黑色丝袜高跟鞋| 精品一区毛片| 91香蕉国产线在线观看| 五月天国产精品| 成人精品福利| 鬼打鬼之黄金道士1992林正英| 99热免费精品| 中文字幕第69页| 精品国产123| 日韩天堂在线| 日本免费a视频| 国产亚洲成aⅴ人片在线观看| 一级特黄aaa| 97成人精品视频在线观看| 久久亚洲成人| 久久福利小视频| 欧美精品少妇一区二区三区| 国产高清在线a视频大全 | 国产乱视频在线观看| 91在线观看免费观看| 亚久久调教视频| 欧美成人一区二区三区高清| 亚洲欧洲在线免费| 亚洲经典视频| 国产一级不卡毛片| 亚洲一区二区精品3399| 日本中文字幕在线看| 久久久水蜜桃| 国产高清一区日本| 中日精品一色哟哟|