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

一次MySQL索引面試,被面試官懟的體無完膚!

數據庫 MySQL
之前有過一次面試,關于MySQL索引的原理及使用被面試官懟的體無完膚,立志要總結一番,然后一直沒有時間。準備好了嗎?一起來看一下吧。

之前有過一次面試,關于MySQL索引的原理及使用被面試官懟的體無完膚,立志要總結一番,然后一直沒有時間(其實是懶……),準備好了嗎?

[[325774]]

索引是什么?

數據庫索引,是數據庫管理系統(DBMS)中一個排序的數據結構,它可以對數據庫表中一列或多列的值進行排序,以協助更加快速的訪問數據庫表中特定的數據。通俗的說,我們可以把數據庫索引比做是一本書前面的目錄,它能加快數據庫的查詢速度。

為什么需要索引?

思考:如何在一個圖書館中找到一本書?設想一下,假如在圖書館中沒有其他輔助手段,只能一條道走到黑,一本書一本書的找,經過3個小時的連續查找,終于找到了你需要看的那本書,但此時天都黑了。

為了避免這樣的事情,每個圖書館才都配備了一套圖書館管理系統,大家要找書籍的話,先在系統上查找到書籍所在的房屋編號、圖書架編號還有書在圖書架幾層的那個方位,然后就可以直接大搖大擺的去取書了,就可以很快速的找到我們所需要的書籍。索引就是這個原理,它可以幫助我們快速的檢索數據。

一般的應用系統對數據庫的操作,遇到最多、最容易出問題是一些復雜的查詢操作,當數據庫中數據量很大時,查找數據就會變得很慢,這樣就很影響整個應用系統的效率,我們就可以使用索引來提高數據庫的查詢效率。

B-Tree和B+Tree

目前大部分數據庫系統及文件系統都采用B-Tree或其變種B+Tree作為索引結構, 我在這里分別講一下。推薦看下:為什么索引能提高查詢速度?

B-Tree

即B樹,注意(不是B減樹),B樹是一種多路搜索樹。使用B-Tree結構可以顯著減少定位記錄時所經歷的中間過程,從而加快存取速度。

B-Tree有如下一些特征:

  1.  定義任意非葉子結點最多只有M個子節點,且M>2。
  2.  根結點的兒子數為[2, M]。
  3.  除根結點以外的非葉子結點的兒子數為[M/2, M], 向上取整 。
  4.  每個結點存放至少M/2-1(取上整)和至多M-1個關鍵字;(至少2個關鍵字)。
  5.  非葉子結點的關鍵字個數=指向兒子的指針個數-1。
  6.  非葉子結點的關鍵字:K[1], K[2], …, K[M-1],且K[i] <= K[i+1]。
  7.  非葉子結點的指針:P[1], P[2], …,P[M](其中P[1]指向關鍵字小于K[1]的子樹,P[M]指向關鍵字大于K[M-1]的子樹,其它P[i]指向關鍵字屬于(K[i-1], K[i])的子樹)。
  8.  所有葉子結點位于同一層。

有關b樹的一些特性:

  1.  關鍵字集合分布在整顆樹的所有結點之中;
  2.  任何一個關鍵字出現且只出現在一個結點中;
  3.  搜索有可能在非葉子結點結束;
  4.  其搜索性能等價于在關鍵字全集內做一次二分查找。

B樹的搜索:從根結點開始,對結點內的關鍵字(有序)序列進行二分查找,如果命中則結束,否則進入查詢關鍵字所屬范圍的兒子結點;重復執行這個操作,直到所對應的節點指針為空,或者已經是是葉子結點。

例如下面一個B樹,那么查找元素43的過程如下:

根據根節點指針找到18、37所在節點,把此節點讀入內存,進行第一次磁盤IO,此時發現43>37,找到指針p3。

根據指針p3,找到42、51所在節點,把此節點讀入內存,進行第二次磁盤IO,此時發現42<43<51,找到指針p2。

根據指針p2,找到43、46所在節點,把此節點讀入內存,進行第三次磁盤IO,此時我們就已經查到了元素43。

在此過程總共進行了三次磁盤IO。

B+Tree

B+Tree屬于B-Tree的變種。與B-Tree相比,B+Tree有以下不同點:

  1.  有n棵子樹的非葉子結點中含有n個關鍵字(B樹是n-1個),即非葉子結點的子樹指針與關鍵字個數相同。這些關鍵字不保存數據,只用來索引,所有數據都保存在葉子節點(B樹是每個關鍵字都保存數據)。

      2.  所有的葉子結點中包含了全部關鍵字的信息,及指向含這些關鍵字記錄的指針,且葉子結點本身依關鍵字的大小自小而大順序鏈接。

      3.  所有的非葉子結點可以看成是葉子節點的索引部分。

      4.  同一個數字會在不同節點中重復出現,根節點的最大元素就是b+樹的最大元素。

相對B樹,B+樹做索引的優勢

  1.  B+樹的磁盤IO代價更低:B+樹非葉子節點沒有指向數據行的指針,所以相同的磁盤容量存儲的節點數更多,相應的IO讀寫次數肯定減少了。
  2.  B+樹的查詢效率更加穩定:由于所有數據都存于葉子節點。所有關鍵字查詢的路徑長度相同,每一個數據的查詢效率相當。
  3.  所有的葉子節點形成了一個有序鏈表,更加便于查找。

關于MySQL的兩種常用存儲引擎MyISAM和InnoDB的索引均以B+樹作為數據結構,二者卻有不同(這里只說二者索引的區別)。推薦看下:InnoDB一棵B+樹可以存放多少行數據?

MyISAM索引和Innodb索引的區別

MyISAM使用B+樹作為索引結構,葉節點葉節點的data域保存的是存儲數據的地址,主鍵索引key值唯一,輔助索引key可以重復,二者在結構上相同。關注微信公眾號:Java技術棧,在后臺回復:mysql,可以獲取我整理的 N 篇 MySQL 教程,都是干貨。

因此,MyISAM中索引檢索的算法為首先按照B+Tree搜索算法搜索索引,如果要找的Key存在,則取出其data域的值,然后以data域的值為地址,去讀取相應數據記錄 。因此,索引文件和數據文件是分開的,從索引中檢索到的是數據的地址,而不是數據。

Innodb也是用B+樹作為索引結構,但具體實現方式卻與MyISAM截然不同,首先,數據表本身就是按照b+樹組織,所以數據文件本身就是主鍵索引文件。葉節點key值為數據表的主鍵,data域為完整的數據記錄。

因此InnoDB表數據文件本身就是主鍵索引(這也就是MyISAM可以允許沒有主鍵,但是Innodb必須有主鍵的原因)。第二個與MyISAM索引的不同是InnoDB的輔助索引的data域存儲相應數據記錄的主鍵值而不是地址。換句話說,InnoDB的所有輔助索引都引用主鍵作為data域。

索引類型

普通索引:(由關鍵字KEY或INDEX定義的索引)的唯一任務是加快對數據的訪問速度。

唯一索引:普通索引允許被索引的數據列包含重復的值,而唯一索引不允許,但是可以為null。所以任務是保證訪問速度和避免數據出現重復。

主鍵索引:在主鍵字段創建的索引,一張表只有一個主鍵索引。

組合索引:多列值組成一個索引,專門用于組合搜索。

全文索引:對文本的內容進行分詞,進行搜索。(MySQL5.6及以后的版本,MyISAM和InnoDB存儲引擎均支持全文索引。)推薦看下:MySQL&nbsp;索引B+樹原理,以及建索引的幾大原則。

索引的使用策略及優缺點

使用索引

主鍵自動建立唯一索引。 

經常作為查詢條件在WHERE或者ORDER BY 語句中出現的列要建立索引。 

查詢中與其他表關聯的字段,外鍵關系建立索引。 

經常用于聚合函數的列要建立索引,如min(),max()等的聚合函數。

不使用索引

經常增刪改的列不要建立索引。 

有大量重復的列不建立索引。 

表記錄太少不要建立索引,因為數據較少,可能查詢全部數據花費的時間比遍歷索引的時間還要短,索引就可能不會產生優化效果 。

最左匹配原則

建立聯合索引的時候都會默認從最左邊開始,所以索引列的順序很重要,建立索引的時候就應該把最常用的放在左邊,使用select的時候也是這樣,從最左邊的開始,依次匹配右邊的。

優點

可以保證數據庫表中每一行的數據的唯一性。 

可以大大加快數據的索引速度。 

加速表與表之間的連接。 

可以顯著的減少查詢中分組和排序的時間。

缺點

創建索引和維護索引要耗費時間,這種時間隨著數據量的增加而增加。 

索引需要占物理空間,除了數據表占用數據空間之外,每一個索引還要占用一定的物理空間,如果需要建立聚簇索引,那么需要占用的空間會更大,其實建立索引就是以空間換時間。 

表中的數據進行增、刪、改的時候,索引也要動態的維護,這就降低了維護效率。

驗證索引是否能夠提升查詢性能

創建測試表index_test

使用python腳本程序通過pymsql模塊,向表中添加十萬條數據 

  1. import pymysql  
  2. def main():  
  3.     # 創建Connection連接  
  4.     conn = pymysql.connect(host='localhost',   
  5.                            port=3306 
  6.                            database='db_test' 
  7.                            user='root' 
  8.                            password='deepin' 
  9.                            charset='utf8' 
  10.     # 獲得Cursor對象  
  11.     cursor = conn.cursor()  
  12.     # 插入10萬次數據  
  13.     for i in range(100000):  
  14.         cursor.execute("insert into index_test values('haha-%d')" % i)  
  15.     # 提交數據  
  16.     conn.commit()  
  17. if __name__ == "__main__": 
  18.      main() 

在mysql終端開啟運行時間監測:set profiling=1;

查找第1萬條數據ha-99999 

  1. select * from index_test where name='haha-99999'

查看執行的時間: 

  1. show profiles; 

為表index_test的name列創建索引: 

  1. create index name index on index_test(name(10)); 

再次執行查詢語句、查看執行的時間:

可以看出合適的索引確實可以明顯提高某些字段的查詢效率。

最后,感謝女朋友在生活中,工作上的包容、理解與支持 ! 

 

責任編輯:龐桂玉 來源: Java技術棧
相關推薦

2021-07-05 22:09:53

面試官CollectionsJDK7

2020-08-03 07:04:54

測試面試官應用程序

2025-07-02 02:45:00

2023-12-25 09:03:33

MySQL索引數據庫

2025-03-07 08:24:10

Javavolatilecount++

2020-11-24 08:15:09

Elasticsear面試分布式

2020-06-22 07:47:46

提交面試官訂單

2024-04-17 08:18:22

MyBatis批量插入SQL

2019-08-19 15:49:17

人生第一份工作程序員跳槽那些事兒

2019-10-21 09:56:37

MySQLCOUNTInnoDB

2015-08-13 10:29:12

面試面試官

2023-01-18 10:35:49

MySQL數據庫

2021-03-17 08:39:24

作用域作用域鏈JavaScript

2021-03-16 22:25:06

作用域鏈作用域JavaScript

2021-12-17 07:30:42

排序算法效率

2021-02-06 09:21:17

MySQL索引面試

2022-09-29 07:30:57

數據庫索引字段

2015-07-14 09:40:57

攜程面試前端面試官

2021-03-22 17:20:48

MYSQL開發數據庫

2025-10-31 02:00:00

點贊
收藏

51CTO技術棧公眾號

在线日本欧美| 嫩草在线播放| 亚洲精品乱码| 亚洲欧美色婷婷| 91视频这里只有精品| 在线中文字幕视频观看| 91视频在线观看免费| 国产精品视频午夜| 日韩精品国产一区二区| 热久久天天拍国产| 日韩av在线免费| 久久久福利影院| 欧美91看片特黄aaaa| 亚洲男同1069视频| 日韩高清国产一区在线观看| www.香蕉视频| 久久国产剧场电影| 欧美一级黑人aaaaaaa做受| 免费精品在线视频| 国产精品一区二区av日韩在线| 日韩一区二区不卡| av网站在线不卡| a欧美人片人妖| 亚洲香蕉伊在人在线观| 中文字幕日韩精品久久| 欧美成熟毛茸茸| 成人av影院在线| 91久热免费在线视频| 五月婷婷激情五月| 麻豆9191精品国产| 97免费在线视频| 久久精品这里只有精品| 欧美成人精品一区二区三区在线看| 亚洲电影av在线| 国产成人强伦免费视频网站| 国产a亚洲精品| 在线欧美一区二区| 日韩av黄色网址| 黄色在线看片| 亚洲综合色网站| 国产91porn| 国产精品剧情一区二区在线观看| 欧美国产日韩一二三区| 免费av一区二区三区| 手机看片福利永久| 成人动漫中文字幕| 成人3d动漫一区二区三区91| av免费观看网址| 国产一区二区电影| 亚洲自拍欧美另类| 精品欧美一区二区精品少妇| 国产精品一卡二卡| 99re6在线| 性一交一乱一乱一视频| 国产成人精品www牛牛影视| 亚洲www视频| 成人黄色在线观看视频| 国产黑丝在线一区二区三区| 99热99热| 熟妇高潮一区二区三区| 97久久久精品综合88久久| 国产一区二区无遮挡| 天堂av手机版| 26uuu久久天堂性欧美| 久久人人九九| 超碰免费在线观看| 亚洲视频一区二区免费在线观看| 亚洲爆乳无码精品aaa片蜜桃| 成人福利在线观看视频| 亚洲夂夂婷婷色拍ww47 | 91极品视频在线观看| 国产精品久久久久77777丨| 在线观看亚洲专区| 天堂av8在线| 亚洲精品aⅴ| 精品日韩欧美在线| 插吧插吧综合网| 欧美一区2区| 久久国产天堂福利天堂| 久久黄色免费网站| 亚洲欧美久久久| 国产欧美亚洲视频| 丰满人妻一区二区三区四区53| 白白色 亚洲乱淫| 欧美中日韩免费视频| 日本激情在线观看| 亚洲综合男人的天堂| 黑森林福利视频导航| 欧美成人家庭影院| 欧美成人a视频| 久久久久无码精品国产sm果冻 | 麻豆视频久久| 精品视频在线播放色网色视频| a天堂中文字幕| 午夜精品视频| 日本精品一区二区三区在线播放视频 | 国产免费999| 精品国产不卡一区二区| 日韩国产精品一区| 久久精品一区二区三区四区五区| 亚洲狠狠婷婷| 国产中文欧美精品| 欧美一区二区视频| 夜夜精品视频一区二区| 色诱视频在线观看| 日韩精品一区二区三区免费视频| 日韩高清a**址| 欧美日韩午夜视频| 日韩有码一区二区三区| 国产精品欧美久久| 日本综合在线| 日韩欧美亚洲综合| 手机免费看av片| 日韩dvd碟片| 91高清视频在线免费观看| 国产又黄又粗又猛又爽| 久久久影院官网| 在线视频一二三区| 精品三区视频| 国产丝袜一区二区三区| 青娱乐在线视频免费观看| 日韩不卡手机在线v区| 国产一级特黄a大片99| 岛国成人毛片| 在线免费亚洲电影| av无码av天天av天天爽| 欧美国产综合| 国产精品一区二区3区| 青青青草原在线| 亚洲一区二区三区四区五区黄| 91视频这里只有精品| 国内精品久久久久久99蜜桃| 91av免费观看91av精品在线| 午夜精品一区二区三| 亚洲欧洲性图库| 男人插女人下面免费视频| 欧美电影在线观看完整版| 操人视频在线观看欧美| 国产又黄又大又爽| 国产精品成人一区二区三区夜夜夜| 午夜dv内射一区二区| 欧美成人午夜77777| 国内精品久久久久久| 午夜精品久久久久久久99| 亚洲视频香蕉人妖| 久久久久久国产精品日本| 婷婷综合激情| 成人激情黄色网| а√天堂官网中文在线| 日韩一区二区在线观看视频播放| 很污很黄的网站| 久久99久久精品| 永久域名在线精品| 日本一区二区乱| 欧美成人精品不卡视频在线观看| 国产福利小视频| 亚洲精品中文字幕在线观看| 美女被爆操网站| 欧美日韩一视频区二区| 国产精品久久一区二区三区| heyzo中文字幕在线| 日韩av在线最新| 欧美性猛交bbbbb精品| 国产日韩欧美麻豆| 亚洲美女性囗交| 欧美69视频| 国产精品日韩二区| 9i看片成人免费高清| 一本色道久久88亚洲综合88| 中文字幕一区二区免费| 自拍偷拍国产亚洲| 一级黄色电影片| 午夜一级久久| 亚洲一区二区精品在线| 成人短视频软件网站大全app| 九九视频这里只有精品| 色综合免费视频| 欧洲av在线精品| 欧美人禽zoz0强交| 成人v精品蜜桃久久一区| 国产欧美在线一区| 久久在线播放| 动漫精品视频| 成人看片网站| 欧美成人激情图片网| 日本一区视频| 欧美久久久久久久久久| 精品处破女学生| 久久久久久亚洲综合影院红桃| 超碰超碰在线观看| 国产精品激情电影| 欧洲国产精品| 2020最新国产精品| 日本精品性网站在线观看| 黄视频网站在线看| 国产男女裸体做爰爽爽| 黑人巨大精品欧美一区二区免费 | 尤物视频一区二区| 亚洲精品视频大全| 国产一区二区成人久久免费影院| 黄色动漫在线免费看| 国产精品久久久久无码av| 久久久福利视频| 久久视频社区| 国产精品成av人在线视午夜片| 91精品久久| 精品夜色国产国偷在线| a网站在线观看| 色激情天天射综合网| 久草视频在线资源站| 中文文精品字幕一区二区| 中文在线观看免费视频| 久久国产精品72免费观看| 99色精品视频| 亚洲视频一区| 麻豆映画在线观看| 欧美裸体在线版观看完整版| 国偷自产av一区二区三区小尤奈| 欧美三级电影网址| 国产91免费观看| 91资源在线观看| 欧美成人精品三级在线观看| 日韩黄色影院| 在线视频欧美性高潮| 性感美女视频一二三| 欧美成人精品福利| 一区二区三区免费在线视频| 色噜噜狠狠一区二区三区果冻| 国产亚洲精品久久久久久无几年桃 | 人人爽香蕉精品| 无码精品a∨在线观看中文| 欧美成人日韩| 青少年xxxxx性开放hg| 9999国产精品| 亚洲一区二区三区午夜| 精品国产一级毛片| 久久综合九色欧美狠狠| 黄色欧美在线| 成人h视频在线观看| 日本免费精品| 操人视频欧美| 99久久香蕉| 国产福利一区二区三区在线观看| 日本一区二区三区播放| 91文字幕巨乱亚洲香蕉| 日韩精品成人在线观看| 91福利视频导航| 视频亚洲一区二区| 91在线直播亚洲| 久久天堂久久| 99国产超薄丝袜足j在线观看| 成人久久精品| 91精品国产综合久久久久久丝袜| 国产一区二区三区免费观看在线| 亚洲a区在线视频| 日本精品国产| 国产视频一区二区三区四区| 欧美aaaaaaaa牛牛影院| 欧美在线一二三区| 日韩欧美中字| 看一级黄色录像| 你懂的网址国产 欧美| 国产女教师bbwbbwbbw| 在线精品一区二区| 99精品视频在线看| 日韩高清在线电影| www.成人黄色| 国产黄色91视频| 亚洲av无码一区二区三区观看| 久久综合资源网| 毛片aaaaaa| 亚洲三级电影全部在线观看高清| 欧美国产日韩在线观看成人| 亚洲综合一区在线| 成人在线免费看视频| 欧美性受极品xxxx喷水| av网站在线免费看| 日韩电影免费观看在线观看| 国产中文字幕在线观看| 按摩亚洲人久久| 国产高清视频色在线www| 国产精品99免视看9| 国产日本亚洲| 精品午夜一区二区三区| 日韩精品永久网址| 久久www视频| 久久久久91| 国产精品二区视频| 久久久不卡影院| 国产精品99久久久久久成人| 亚洲va欧美va人人爽午夜| 日韩黄色片网站| 精品久久久久久久久久久久包黑料 | 久操免费在线视频| 日韩欧美国产骚| 国产男男gay网站| 国产午夜精品理论片a级探花| 婷婷在线视频| 国产91精品久| 日韩精品久久久久久久软件91| 欧美日韩亚洲一区二区三区在线观看| 欧美疯狂party性派对| 亚洲一区二区三区av无码| 免费亚洲电影在线| 五月天丁香社区| 国产精品传媒视频| 亚洲成熟少妇视频在线观看| 欧美大片在线观看| sese一区| 日本韩国欧美精品大片卡二| 日韩在线观看中文字幕| 色一情一乱一伦一区二区三区丨| 一区精品久久| 亚洲美女性囗交| 亚洲国产高清不卡| 日韩精品一区三区| 欧美高清你懂得| 国产乱子伦三级在线播放| 国语自产精品视频在线看| 久久国际精品| 亚洲午夜精品久久| 国产精品呻吟| 四虎永久免费观看| 自拍偷拍亚洲激情| 一区二区三区午夜| 在线视频日本亚洲性| 色黄视频在线观看| 狠狠色狠狠色综合人人| 欧美日韩91| 九色91porny| 成人免费一区二区三区视频 | 免费看日韩精品| 天天躁日日躁aaaxxⅹ | 伊人免费在线观看| 亚洲欧洲xxxx| 色婷婷综合久久久中字幕精品久久| 国模一区二区三区私拍视频| 影音先锋久久资源网| 免费看91视频| 亚洲一二三区不卡| 黄色av小说在线观看| 久久99热这里只有精品国产| 日韩一区中文| 99久久久无码国产精品性色戒| 开心九九激情九九欧美日韩精美视频电影 | 久久久久久久一区二区| 日韩欧美一级| 真人做人试看60分钟免费| 国产馆精品极品| 免费视频网站www| 精品播放一区二区| 不卡av免费观看| 精品国产一区二区三区麻豆小说 | 五月天av在线| 欧美不卡在线一区二区三区| 亚洲在线日韩| 88久久精品无码一区二区毛片| 色香蕉成人二区免费| av基地在线| 91香蕉嫩草影院入口| 午夜电影亚洲| 久久无码人妻精品一区二区三区| 欧美视频在线观看免费| 黄色大片在线看| 国产一区视频在线| 中文字幕日韩一区二区不卡| 欧美久久久久久久久久久| 亚洲成av人影院在线观看网| 美国一级片在线免费观看视频| 国产精品久久久久久久电影| 五月天久久久| 最新日本中文字幕| 欧美性xxxx极品hd满灌| 91在线免费看| av一区二区三区四区电影| 99精品国产一区二区青青牛奶| 国产交换配乱淫视频免费| 欧美日韩国产不卡| 先锋影音在线资源站91| 久久国产精品亚洲va麻豆| 日本成人中文字幕在线视频| 国产性生活大片| 精品丝袜一区二区三区| 欧美成人三级| www.com毛片| 中文字幕一区二区5566日韩| 丰满肥臀噗嗤啊x99av| 日本久久久久久| 中文字幕一区二区三区乱码图片| 黄色录像a级片| 欧美视频三区在线播放| 国产偷倩在线播放| 日韩精品一线二线三线| 国产成人在线看| 做爰无遮挡三级| 久久久爽爽爽美女图片| 成人免费在线播放| 好吊色视频一区二区三区| 欧美色中文字幕| 中文字幕高清在线播放|