成人怡红院-成人怡红院视频在线观看-成人影视大全-成人影院203nnxyz-美女毛片在线看-美女免费黄

站長資訊網
最全最豐富的資訊網站

一起來聊聊MySQL索引結構

本篇文章給大家帶來了關于mysql的相關知識,MySQL官方對索引的定義為索引(Index)是幫助MySQL高效獲取數據的數據結構,可以得到索引的本質,索引是數據結構,下面一起來看一下,希望對大家有幫助。

一起來聊聊MySQL索引結構

推薦學習:mysql視頻教程

簡介

在數據之外,數據庫系統還維護著滿足特定查找算法的數據結構,這些數據結構以某種方式引用(指向)數據,這樣就可以在這些數據結構上實現高級查找算法。這種數據結構,就是索引。

一般來說索引本身也很大,不可能全部存儲在內存中,因此索引往往以索引文件的形式存儲的磁盤上。

優點:

1、類似大學圖書館建書目索引,提高數據檢索的效率,降低數據庫的IO成本。

2、通過索引列對數據進行排序,降低數據排序的成本,降低了CPU的消耗。

缺點:

1、雖然索引大大提高了查詢速度,同時卻會降低更新表的速度,如對表進行INSERT、UPDATE和DELETE。因為更新表時,MySQL不僅要保存數據,還要保存一下索引文件。每次更新添加了索引列的字段,都會調整因為更新所帶來的鍵值變化后的索引信息。

2、實際上索引也是一張表,該表保存了主鍵與索引字段,并指向實體表的記錄,所以索引列也是要占用空間的

索引舉例:(用樹結構做索引)

左邊是數據表,一共有兩列七條記錄,最左邊的是數據記錄的物理地址。

一起來聊聊MySQL索引結構

為了加快Col2的查找,可以維護一個右邊所示的二叉查找樹,每個節點分別包含索引鍵值和一個指向對應數據記錄物理地址的指針,這樣就可以運用二叉查找在一定的復雜度內獲取到相應數據,從而快速的檢索出符合條件的記錄。

索引結構(樹)

如何通過索引加快數據庫表的查詢速度呢?為了方便講解,我們限定于數據庫表只包含下面這樣兩個查詢需求:

1、select* from user where id=1234;

2、select *from user where id>1234 and id<2345;(按區間)

為什么用樹,而不用哈希表

哈希表按值查詢的性能很好,時間復雜度是O(1),但它不能支持按照區間快速查找數據,因此無法滿足要求。同理,盡管平衡二叉查找樹查詢性能很高,時間復雜度為O(logn),而且對樹進行中序遍歷,可以輸出有序的數據序列,但也無法滿足按照區間快速查找數據的需求。

為了支持按照區間快速查找數據,我們對二叉查找樹進行改造,將二叉查找樹的葉子節點用鏈表串起來,如果要查找某個區間的數據,只需要用區間的起始值,在樹中進行查找,當定位到有序鏈表中的某個節點之后,再從這個節點開始順著有序鏈表往后遍歷,直到有序鏈表中的節點數據值大于區間終止值為止。

一起來聊聊MySQL索引結構

又因為樹上的很多操作的時間復雜程度與樹的高度成正比,降低的樹的高度,就能減少磁盤IO操作。因此我們把索引構建成m叉樹(m>2),詳細介紹可看后文。

BTree索引

在介紹B+樹之前,先來了解一下B樹。

一起來聊聊MySQL索引結構

1、初始化介紹

一顆b樹,淺藍色的塊我們稱之為一個磁盤塊,可以看到每個磁盤塊包含幾個數據項(深藍色所示)和指針(黃色所示),如磁盤塊1包含數據項17和35,包含指針P1、P2、P3。P1表示小于17的磁盤塊,P2表示在17和35之間的磁盤塊,P3表示大于35的磁盤塊。

注意:

真實的數據只存在于葉子節點,即3、5、9、10、13、15、28、29、36、60、75、79、90、99。(而且是多條數據組成的數據區間:3~ 5,… … ,90~ 99)

非葉子節點不存儲真實的數據,只存儲指引搜索方向的數據項,如17、35并不真實存在于數據表中。

2、查找過程

如果要查找數據項29,那么首先會把磁盤塊1由磁盤加載到內存,此時發生一次IO,在內存中用二分查找確定29在17和35之間,鎖定磁盤塊1的P2指針,內存時間因為非常短(相比磁盤的IO)可以忽略不計,通過磁盤塊1的P2指針的磁盤地址把磁盤塊3由磁盤加載到內存,發生第二次IO,29在26和30之間,鎖定磁盤塊3的P2指針,通過指針加載磁盤塊8到內存,發生第三次IO,同時內存中做二分查找找到29,結束查詢,總計三次IO。

B+Tree索引

B+樹和B樹類似,B+樹是B樹的改進版。 即:m叉查找樹與有序鏈表構建成的樹就是B+樹,也就是要存儲的樹索引

一起來聊聊MySQL索引結構

如圖:B+樹和B樹的主要區別有以下兩點:

1、B+樹的葉子節點用鏈表來串聯。 查找某個區間的數據,只需要用區間的起始值,在樹中進行查找,當定位到有序鏈表中的某個節點之后,再從這個節點開始順著有序鏈表往后遍歷,直到有序鏈表中的節點數據值大于區間終止值為止。

2、B+樹中的任何節點都不存儲真實數據,只是用來索引。 B樹直接通過葉子節點獲取到數據;而B+樹每個葉子節點存儲數據行的鍵值和地址信息,當查詢到某個葉子節點時,通過葉子節點的地址找到真實的數據信息。

聚簇索引與非聚簇索引

聚簇索引并不是一種單獨的索引類型,而是一種數據存儲方式。 術語‘聚簇’表示數據行和相鄰的鍵值聚簇的存儲在一起。

聚簇索引的好處:

按照聚簇索引排列順序,查詢顯示一定范圍數據的時候,由于數據都是緊密相連,數據庫不不用從多個數據塊中提取數據,所以節省了大量的io操作。

聚簇索引的限制:

1、對于mysql數據庫目前只有innodb數據引擎支持聚簇索引,而Myisam并不支持聚簇索引。

2、由于數據物理存儲排序方式只能有一種,所以每個Mysql的表只能有一個聚簇索引。一般情況下就是該表的主鍵。

3、為了充分利用聚簇索引的聚簇的特性,所以innodb表的主鍵列盡量選用有序的順序id,而不建議用無序的id,比如uuid這種。

如下圖,左側的索引就是聚簇索引,因為數據行在磁盤的排列和索引排序保持一致。

一起來聊聊MySQL索引結構

索引分類

單值索引

即一個索引只包含單個列,一個表可以有多個單列索引

隨表一起建索引: CREATE TABLE customer ( id INT(10) UNSIGNED  AUTO_INCREMENT , customer_no VARCHAR(200), customer_name VARCHAR(200), PRIMARY KEY(id), KEY (customer_name) );   單獨建單值索引: CREATE  INDEX idx_customer_name ON customer(customer_name);    刪除索引: DROP INDEX idx_customer_name  on customer;

唯一索引

索引列的值必須唯一,但允許有空值

隨表一起建索引: CREATE TABLE customer ( id INT(10) UNSIGNED  AUTO_INCREMENT , customer_no VARCHAR(200), customer_name VARCHAR(200),   PRIMARY KEY(id),   KEY (customer_name),   UNIQUE (customer_no) );    單獨建唯一索引: CREATE UNIQUE INDEX idx_customer_no ON customer(customer_no);    刪除索引: DROP INDEX idx_customer_no on customer ;

主鍵索引

設定為主鍵后數據庫會自動建立索引,innodb為聚簇索引

隨表一起建索引: CREATE TABLE customer ( id INT(10) UNSIGNED  AUTO_INCREMENT , customer_no VARCHAR(200), customer_name VARCHAR(200),   PRIMARY KEY(id)  );     CREATE TABLE customer2 ( id INT(10) UNSIGNED   , customer_no VARCHAR(200), customer_name VARCHAR(200),   PRIMARY KEY(id)  );    單獨建主鍵索引: ALTER TABLE customer   add PRIMARY KEY customer(customer_no);     刪除建主鍵索引: ALTER TABLE customer   drop PRIMARY KEY ;     修改建主鍵索引: 必須先刪除掉(drop)原索引,再新建(add)索引

復合索引

即一個索引包含多個列

隨表一起建索引: CREATE TABLE customer ( id INT(10) UNSIGNED  AUTO_INCREMENT , customer_no VARCHAR(200), customer_name VARCHAR(200),   PRIMARY KEY(id),   KEY (customer_name),   UNIQUE (customer_name),   KEY (customer_no,customer_name) );   單獨建索引: CREATE  INDEX idx_no_name ON customer(customer_no,customer_name);    刪除索引: DROP INDEX idx_no_name  on customer ;

性能分析

索引創建場景

哪些情況需要創建索引

1、主鍵自動建立唯一索引

2、頻繁作為查詢條件的字段應該創建索引

3、查詢中與其它表關聯的字段,外鍵關系建立索引

4、單鍵/組合索引的選擇問題, 組合索引性價比更高

5、查詢中排序的字段,排序字段若通過索引去訪問將大大提高排序速度

6、查詢中統計或者分組字段

哪些情況不要創建索引

1、表記錄太少

2、經常增刪改的表或者字段 原因:提高了查詢速度,同時卻會降低更新表的速度,如對表進行INSERT、UPDATE和DELETE。因為更新表時,MySQL不僅要保存數據,還要保存一下索引文件

3、Where條件里用不到的字段不創建索引

4、過濾性不好的不適合建索引

推薦學習:mysql視頻教程

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
久久久久亚洲AV无码专区首JN| 黑人AV免费电影| 国产精品人成在线播放新网站| 国产妇女馒头高清泬20P多毛| 国产熟妇一区二区三区AⅤ在线 | 亚洲GV永久无码天堂网| 亚洲AV日韩AV永久无码绿巨人| 亚洲精品无码AV人在线观看国产| 夜夜高潮夜夜爽夜夜爱爱一区| 在线亚洲97SE亚洲综合在线| AV无码精品一区二区三区| 成人欧美一区二区三区在线观看| 国产成人久久精品| 狠狠色婷婷久久一区二区三区 | 欧美日韩亚洲中文字幕一区二区三| 日本免费一区二区三区| 无码国内精品久久人妻| 亚洲AV日韩AⅤ永久无码| 亚洲伊人久久大香线蕉综合图片| 18禁黄网站禁片免费观看女女 | 精品国产V无码大片在线看| 胯下娇喘的班主任| 任你躁X7X7X7X7在线观看| 无码国产69精品久久久久APP| 亚洲AV无码一区二区三区系列| 夜夜躁婷婷AV蜜桃妖精视频| JAPANESE丰满人妻HD| 国产激情一区二区三区| 精品一区二区三区在线视频| 欧美少妇XXXXX| 无码日韩人妻AV一区免费| 艳妇乳肉豪妇荡乳ⅩXXOO软件| TPU色母和PA6色母的作用| 国产精品毛片一区内射| 久久精品夜色国产亚洲AV| 全彩漫画口工18禁无遮H| 午夜精品久久久久9999高清| 永久免费观看美女裸体的网站| 草草浮力影院禁止18进入| 国产一区二区三区在线电影| 男女裸交免费无遮挡全过程| 四虎永久在线精品免费网址 | 精产国品一二三产品区别视频手机 | 亚洲阿V天堂无码Z2018| AVTT天堂网久久精品| 国产精品偷伦视频免费观看了| 久久亚洲AV无码精品色午夜麻豆| 日本熟妇XXⅩ浓密黑毛| 亚洲国产精品久久久久4婷婷 | 真实差差差无掩盖视频30分钟 | 少妇私密会所按摩到高潮呻吟| 亚洲熟妇无码AⅤ在线播放| 草木影视在线视频免费观看| 精东传媒一二三区进站口| 强制高潮18XXXXHD日韩| 亚洲а∨天堂男人色无码蜜臀69 | 国产亚洲欧美日韩在线一区二区三 | 亚洲中文字幕无码一久久区| 疯狂做受XXXX国产| 久久久久国色AⅤ免费看| 丝瓜秋葵草莓香蕉榴莲绿| 在线观看AV黄网站永久| 国产精品毛片在线完整版SAB| 免费无码AV一区二区波多野结衣| 午夜免费无码福利视频| ATLANTICOCEAN巨大| 激情偷乱人伦小说视频最新章节| 日本XXWWWXXXX| 野花日本韩国视频免费高清观看| 高清FREESEXMOVIES性TV出水| 看黄A大片日本真人视频直播| 玩丰满少妇ⅩXX性人妖| 97人洗澡人人澡人人爽人人模 | 亚洲高清专区日韩精品| 豆国产97在线 | 亚洲| 两口子交换真实刺激高潮| 午夜精品一区二区三区在线视| WWW国产无套内射COM| 久久久久久午夜成人影院| 无码人妻一区二区三区四区AV| DY888午夜福利视频| 精品久久久久久久无码| 熟女精品视频一区二区三区| 99无码人妻一区二区三区免费| 精品国产午夜福利在线观看| 四虎成人精品无码| XOXOXO性ⅩYY欧美69| 久久自己只精产国品| 亚洲AV无码精品色午夜蜜芽 | 被两个黑人玩得站不起来了| 老司机亚洲精品影院| 亚洲AV午夜成人片精品| 高H乱好爽要尿了潮喷了| 欧美男男作爱GAYWWW| 一面亲上边一面膜下边文字的含义| 国产日产欧产精品精品| 色欲午夜无码久久久久久| FRYEE性欧美18 19| 麻豆久久久9性大片| 亚洲精品99久久久久中文字幕 | 久久人妻少妇嫩草AV无码专区| 亚洲AV无码专区在线播放中文| 国产AⅤ无码久久丝袜美腿| 人妻少妇伦在线麻豆M电影| 2022国产在线无码精品| 久久久无码中文字幕久| 亚洲乱码精品久久久久..| 国产影片AV级毛片特别刺激| 婷婷五月综合色中文字幕| 丁香花在线视频观看免费| 人妻夜夜添夜夜无码AV| 99久久久无码国产麻豆| 免费观看的AV毛片的网站| 亚洲永久网址在线观看| 精品乱码一区二区三区av| 亚洲AV无码日韩AⅤ无码忘忧草| 国产精华液和欧美的精华液的区别 | 肥水不流外人田小说| 日本少妇春药特殊按摩3| ZOOFILIA杂交JAPAN| 欧美美女多人群交视频| 99久久免费国产精品2021| 男男AV纯肉无码免费播放无码| 在线观看国产成人AⅤ天堂| 久久亚洲精品无码GV| 夜夜爽一区二区三区精品| 久久久久99人妻一区二区三区| 亚洲午夜无码久久久久软件| 久久99亚洲网美利坚合众国| 亚洲桃色AV无码| 久久人人妻人人妻人人澡av| 一区二区三区AV波多野结衣| 麻豆传播媒体2023最新网站 | 男女超爽视频免费播放| 99国产精品白浆无码流出| 欧美视频一区二区三区四区| CC小恩雅透明内抹油的使用方法| 九九九九精品视频在线观看| 亚洲男人的天堂在线播放 | CEK俄罗斯BNAE0| 欧美性VIDEOS高清精品| SUNTEK中老年妈妈| 欧美成人午夜免费全部完| XXXX内射中国老妇| 人妻熟妇乱又伦精品视频无广告| YIN荡到骨子里的SAO货| 人与畜禽共性关系的重要性| 岛国精品一区免费视频在线观看| 日韩一区二区高清视频| 国产AV无码专区影视| 无码成人H动漫在线网站| 国精产品一区二区三区糖心269| 亚洲CHINESE男同志GAY| 精品人妻一区二区三区乱码 | 久人人爽人人爽人人片AV| 13小男生GAY自慰脱裤子| 欧美性色XXⅩXXA片HD| 成 人 免费 黄 色 网站视频| 少妇又紧又深又湿又爽视频| 成人精品一区二区久久久| 无码人妻精品一区二区蜜桃天美| 国产三级精品三级在线观看| 亚洲国产精品悠悠久久琪琪| 叫吧宝贝我想听你叫什么| 在线播放亚洲第一字幕| 欧美极品少妇XXXX亚洲精品| 差差差很疼视频30分钟无掩盖| 日韩乱码人妻无码系列中文字幕| 国产精品无码免费播放| 亚洲精品宾馆在线精品酒店| 久久水蜜桃网国产欧美H版护士| 18款夜间禁用粉色短视频软件 | 国产高清自产拍AV在线| 亚洲国产成人精品无码区在线| 久久亚洲AⅤ精品网站婷婷| 99久久99精品久久久久久| 日韩人妻无码视频| 国产专区国产AV| 伊人色综合久久天天| 欧美一级 片内射黑人B| 国产产无码乱码精品久久鸭| 亚洲乱理伦片在线观看中字| 麻豆精品传媒一二三区| 边做边爱完整版免费视频播放| 无码A级毛片免费视频内谢5J| 久久99精品久久久久久青青| CAOPORN免费视频在线| 乌克兰13一14处A交| 好紧好深好大乳无码中文字幕| 综合色一色综合久久网| 色婷婷AV一区二区三区| 狠狠躁夜夜躁人人爽天天不卡软件| 曰韩人妻无码一区二区三区综合部| 日本大乳高潮视频在线观看| 国产在线观看无遮挡无码AⅤ多人| 一本无线乱码不卡一二三四 | 97久久人人超碰超碰窝窝| 天堂А√在线最新版中文在线 | 免费看AV在线网站网址| 从厨房到餐桌JOYCE|