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

MySQL索引背后的數據結構及算法之索引實現

數據庫 MySQL 算法
在MySQL中,索引屬于存儲引擎級別的概念,不同存儲引擎對索引的實現方式是不同的,本文主要討論MyISAM和InnoDB兩個存儲引擎的索引實現方式。

MyISAM索引實現

MyISAM引擎使用B+Tree作為索引結構,葉節點的data域存放的是數據記錄的地址。下圖是MyISAM索引的原理圖:

圖8

這里設表一共有三列,假設我們以Col1為主鍵,則圖8是一個MyISAM表的主索引(Primary key)示意。可以看出MyISAM的索引文件僅僅保存數據記錄的地址。在MyISAM中,主索引和輔助索引(Secondary key)在結構上沒有任何區別,只是主索引要求key是唯一的,而輔助索引的key可以重復。如果我們在Col2上建立一個輔助索引,則此索引的結構如下圖所示:

圖9

同樣也是一顆B+Tree,data域保存數據記錄的地址。因此,MyISAM中索引檢索的算法為首先按照B+Tree搜索算法搜索索引,如果指定的Key存在,則取出其data域的值,然后以data域的值為地址,讀取相應數據記錄。

MyISAM的索引方式也叫做“非聚集”的,之所以這么稱呼是為了與InnoDB的聚集索引區分。

#p#

InnoDB索引實現

雖然InnoDB也使用B+Tree作為索引結構,但具體實現方式卻與MyISAM截然不同。

第一個重大區別是InnoDB的數據文件本身就是索引文件。從上文知道,MyISAM索引文件和數據文件是分離的,索引文件僅保存數據記錄的地址。而在InnoDB中,表數據文件本身就是按B+Tree組織的一個索引結構,這棵樹的葉節點data域保存了完整的數據記錄。這個索引的key是數據表的主鍵,因此InnoDB表數據文件本身就是主索引。

圖10

圖10是InnoDB主索引(同時也是數據文件)的示意圖,可以看到葉節點包含了完整的數據記錄。這種索引叫做聚集索引。因為InnoDB的數據文件本身要按主鍵聚集,所以InnoDB要求表必須有主鍵(MyISAM可以沒有),如果沒有顯式指定,則MySQL系統會自動選擇一個可以唯一標識數據記錄的列作為主鍵,如果不存在這種列,則MySQL自動為InnoDB表生成一個隱含字段作為主鍵,這個字段長度為6個字節,類型為長整形。

第二個與MyISAM索引的不同是InnoDB的輔助索引data域存儲相應記錄主鍵的值而不是地址。換句話說,InnoDB的所有輔助索引都引用主鍵作為data域。例如,圖11為定義在Col3上的一個輔助索引:

圖11

這里以英文字符的ASCII碼作為比較準則。聚集索引這種實現方式使得按主鍵的搜索十分高效,但是輔助索引搜索需要檢索兩遍索引:首先檢索輔助索引獲得主鍵,然后用主鍵到主索引中檢索獲得記錄。

了解不同存儲引擎的索引實現方式對于正確使用和優化索引都非常有幫助,例如知道了InnoDB的索引實現后,就很容易明白為什么不建議使用過長的字段作為主鍵,因為所有輔助索引都引用主索引,過長的主索引會令輔助索引變得過大。再例如,用非單調的字段作為主鍵在InnoDB中不是個好主意,因為 InnoDB數據文件本身是一顆B+Tree,非單調的主鍵會造成在插入新記錄時數據文件為了維持B+Tree的特性而頻繁的分裂調整,十分低效,而使用自增字段作為主鍵則是一個很好的選擇。

下一章將具體討論這些與索引有關的優化策略。

原文鏈接:http://www.cnblogs.com/leoo2sk/archive/2011/07/10/mysql-index.html

【編輯推薦】

  1. MySQL中創建及優化索引組織結構的思路
  2. 微博 請問你是怎么優化數據庫的?
  3. MySQL技巧:結合相關參數 做好Limit優化
  4. MySQL數據庫的優化(下)MySQL數據庫的高可用架構方案
  5. MySQL數據庫的優化(上)單機MySQL數據庫的優化
責任編輯:艾婧 來源: EricZhang's Technology Blog
相關推薦

2011-07-11 13:11:54

MySQL索引數據結構

2011-07-11 16:05:42

MySQL索引

2021-10-12 07:58:10

MySQL索引數據

2011-07-11 15:28:19

MySQL索引優化

2023-04-12 16:45:07

MySQL索引數據結構

2017-05-11 11:59:12

MySQL數據結構算法原理

2023-12-28 10:54:58

MySQL記錄存儲

2023-04-28 08:53:09

2021-09-12 17:31:17

Python數據結構

2015-10-30 15:55:43

MySQL

2018-01-18 16:10:42

數據庫MySQLOracle

2011-05-30 10:36:49

MySQL

2023-09-25 12:23:18

Python

2011-10-13 09:44:49

MySQL

2014-04-04 11:14:18

JavaScriptStack遞歸

2020-12-31 05:31:01

數據結構算法

2021-12-10 11:27:59

數據結構算法單調遞增的數字

2020-10-12 11:48:31

算法與數據結構

2015-04-21 13:09:01

B+樹MySQL索引結構

2020-10-30 09:56:59

Trie樹之美
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 婷婷开心激情综合五月天 | 在线免费观看黄网 | 免费国产一区二区 | 欧美日韩中文字幕 | 亚洲精品成人 | 国产精品不卡一区 | 99久久婷婷国产综合精品电影 | 自拍偷拍第一页 | 色婷婷亚洲 | 欧美日韩中文国产一区发布 | 97精品超碰一区二区三区 | 久久精品国产亚洲一区二区三区 | 成人综合一区二区 | 国产a爽一区二区久久久 | 久久亚洲国产精品日日av夜夜 | 亚洲xxxxx | 精品视频久久久久久 | 免费日本视频 | 麻豆精品久久久 | 国产一区二区三区高清 | 亚洲精品一区二区 | 精品视频一区二区三区在线观看 | 久久国产精品一区二区三区 | 中国一级特黄真人毛片 | 在线成人av | 美女视频h | 午夜激情一区 | 高清视频一区二区三区 | 国产高清区 | 精品国产精品国产偷麻豆 | 黄色成人av | 九九99九九精彩46 | 免费在线观看一区二区 | 天天干免费视频 | 三级黄视频在线观看 | 日韩色综合 | 国产伦一区二区三区四区 | 日日夜夜精品视频 | 一区二区福利视频 | 国产精品视频免费观看 | 日韩另类 |