国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

小白學習mysql之高新能索引基礎篇

開發 后端
索引在數據庫中的地位是及其的重要,同時要想完全的掌握索引并不是一件容易的事,需要對數據的查詢原理以及計算機操作系統有深刻的認識,當然相關的算法和數據結構也是必須的。因此,這篇文章感到了一些壓力,不過還是決定先拿出來總結一下,理一理索引,就當做學習筆記了。

索引在數據庫中的地位是及其的重要,同時要想完全的掌握索引并不是一件容易的事,需要對數據的查詢原理以及計算機操作系統有深刻的認識,當然相關的算法和數據結構也是必須的。因此,這篇文章感到了一些壓力,不過還是決定先拿出來總結一下,理一理索引,就當做學習筆記了。

索引的重要習性猶如一本字典的拼音檢索和部首檢索部分,想象一下你買了一本只有正文的字典,那該有多么抓狂。而且在一個軟件系統中,通常數據的查詢與修改往往占到了10:1的比例,也就是我們需要將大部分的精力投入到數據的查詢上,其中很多工作是用來提升查詢的速度的,那么在這個過程中索引就扮演者非常重要的角色。

索引的實質

如果說一本字典的正文內容的實質是紙張的話,那么它前面按照拼音或者部首檢索的索引的實質是什么呢!當然也是紙張了,可能有人覺得是廢話,當我們同時類比到索引上就可以知道,一個數據表的實質是數據文件(即文件),那么索引的實質也當然是文件了,Mysql的InnoDB的數據表中的索引就是表空間的一部分。因此,初學者可以把索引完全想象成為一本字典,一本字典就是一個數據表,正文部分呢,就是這個數據表的詳細內容,按照拼音和部首的檢索都是索引。 當我們通過索引查找一條數據項的時候就猶如通過拼音索引查找某一個字,當在索引中查找到那個字的時候,會根據右邊對應的頁碼找到那個字的解釋,同樣,MySQL的索引工作原理也是如此,每個索引項都有一個建索引列的關鍵字和一個指向該數據項的指針(類似字典中的頁碼),當我們查找到那個目標關鍵字時,根據指針便可以直接定位到數據表中該關鍵字的位置。

但現實中的真是數據表并不像字典那樣,內容都是嚴格按照拼音序列排列的,因為有很多不確定的新內容要插入或者要進行其他操作,所以字典只是一種特殊的數據表,并不能把所有的數據表都拿來和字典比,這里用字典來類比只是為了對索引的實質有一個立體的認識。

索引是如何實現快速查找的

假設A公司有1024名員工(員工編號1-1024),早上的出勤人數為1023次,現在想知道員工編號為8的小明是否出勤,如何通過早上的簽到表快速的查詢小明是否出勤呢!在沒有索引的情況下,通常的做法是從第一條記錄逐個向后查找,如果小明最后一個來或者沒有來,那么就需要查找1023次,效率為O(N)。也許會覺得1023次查找對現在的計算機根本不算什么,但是對于很多系統動輒都是上千萬的數據記錄,你可以想象查找的時間,比如你用15分鐘終于通過了qq的身份校驗登陸上了qq是一種怎么樣的體驗。因此,索引就呼之欲出了,我們如何通過索引來提高一個數量級的查找效率,這個時候就需要對這1024條數據做些什么了,在每條記錄插入的時候,可以根據每條記錄的員工編號和存儲該記錄的地址(指針)建立一個二叉查找樹,這樣1023條記錄便可以通過10次查找便可查到,查找效率足足提高了100倍。

同樣,為了效率的提升,也付出了一些代價,因為建立二叉查找樹需要額外的存儲空間,同時每次插入數據的時候需要對二叉查找樹進行維護,減緩了數據的更新速度。但綜合來考慮,一般認為這樣做是值得的。

當然在MySQL中,不是采用的二叉樹查找樹來完成索引的存儲的,上面舉得例子只是為了說明索引的工作過程,但其思想是相同的。MySQL中沒有特殊說明的話,一般說的索引指的就是B-Tree索引,采用B-Tree這種數據結構是綜合了計算機操作系統以及組成而綜合考慮的。其核心思想主要是減少磁盤的IO次數,提高查詢速度。

如何理解聚簇索引

你只需記住它的名字叫聚簇索引,它不同于其他普通的索引!聚簇索引不僅僅是一種索引,更是一種存儲方式,InnoDB中將B-Tree索引和數據行存儲在一個數據結構中,意味著什么呢?這意味著數據行即索引,索引即數據行,它們是在一起,在一起,在一起的。

接著通過來建立字典的例子來理解聚簇索引和其他普通索引的區別,現在要建立一本中華字典,這個時候字典是空的,要我們造一本字典出來,首先我們要完成字典的正文,我們按照漢語拼音的順序去組織字典的正文,第一個是“安 an ”,放在一個位置,同時后面附加上注釋(這里,“an”就相當于聚簇索引的關鍵字,而后面的注釋就是數據行,它們存在一起),第二個是“王 wang”字,通過和“安 an”字比較,拼音順序靠后,所以放第二個。注意這里的放是指存儲在磁盤中的位置,可以理解為存儲順序。第三個字是“小 xiao”字,通過拼音順序,需要將第三個字存在第一個字“安”后面,那“王”字已經占了磁盤頁面的位置,所以它需要向后面移動,如果移出該列,就導致了也分裂,所以可以看到聚集索引的更新代價真的很大,那為什么還要這樣做呢?聚簇索引帶來了那些好處?

......,假設按照上面方法已經建立好了字典的正文內容,這個時候就可以讓我們體會一下聚簇索引的好處了,假如你要找“安 an”字,根據拼音序列,你一定知道它一定在前幾個頁面,所以直接可以翻到前面,同時你也可以找到拼音“an”所對應的所有的漢字,這就是聚簇索引帶來的好處,同時聚簇索引是和數據行放在一起的,你不需要在根據索引里的指針找到對應的數據行,然后翻頁找到(翻頁就相當于磁盤IO),這些都是效率的提升。然而,上面也看到了聚簇索引的負面影響比如插入的時候,因此它就像一般利劍,用的合適效率提升,用的糟糕也會帶來很大的不好影響。

是時候區別一下非聚聚索引了,這個時候我們又按照部首建立了一個索引,那么按照部首建立的索引就是非聚簇索引,它單獨的存在在字典的前幾個頁面,而且同一個部首的字所對應的頁碼也是沒有順序的,如果我們要山字旁所對應的所有漢字,那就要取很多個頁面的值,導致很多隨機IO產生,同時不能很好利用計算機存儲系統的緩存系統,因此效率遠沒有聚簇索引高。

InnoDB中聚簇索引產生的原則:

  • 當有主鍵時,主鍵為聚簇索引
  • 當沒有主鍵時,引擎會選擇一個唯一的*非空*列來作為聚簇索引
  • 如果沒有以上兩種情況的列,引擎會隱式的定義一個主鍵作為聚簇索引

最后,通過建立一個數據表來感受聚簇索引,首先建立有一個沒有主鍵也沒有唯一非空列索引的數據表,即聚簇索引是系統隱式生成這種情況。這種情況,一般就是按數據插入的先后順序進行排列。

  1. CREATE TABLE user_log (
  2. user_id INT NOT NULL,
  3. place VARCHAR(20) NOT NULL DEFAULT '',
  4. login_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
  5.  
  6. ) DEFAULT CHARSET utf8;

接下來插入三條數據:

  1. > INSERT INTO user_log(user_id,place)
  2. VALUES('1','中國');
  3. > INSERT INTO user_log(user_id,place)
  4. VALUES('2','中國');
  5. > INSERT INTO user_log(user_id,place)
  6. VALUES('1','美國');

然后,選擇所有列(即按照存儲順序查看數據列),果然如我們猜想,是按照插入順序存儲的:

  1. > SELECT * FROM user_log;
  2.  
  3. user_id place login_time
  4. 1 中國 2015-11-20 10:32:41
  5. 2 中國 2015-11-20 10:33:18
  6. 1 美國 2015-11-20 10:33:18

接下來,我們添加一個唯一的索引(ID+login_time),此時 系統引擎應該將此索引作為聚簇索引,因此我們再次插入新的數據的時候是按照ID聚簇存儲的,就是說ID相同的會存儲在一起,存儲在同一個頁面,甚至連續的幾個頁面。 下面首先添加這個唯一索引 并接著添加三條新的記錄:

  1. > ALTER TABLE user_log ADD UNIQUE KEY U_USER_LOG_ID_LOGIN_TIME(user_id,login_time);
  2.  
  3. > INSERT INTO user_log(user_id,place)
  4. VALUES('1','法國');
  5. > INSERT INTO user_log(user_id,place)
  6. VALUES('2','日本');
  7. > INSERT INTO user_log(user_id,place)
  8. VALUES('1','韓國');

然后接著查看數據的存儲情況:

  1. > SELECT * FROM user_log;
  2.  
  3. user_id place login_time
  4. 1 中國 2015-11-20 10:32:41
  5. 1 美國 2015-11-20 10:33:18
  6. 1 法國 2015-11-20 10:48:00
  7. 2 中國 2015-11-20 10:33:18
  8. 2 日本 2015-11-20 10:48:00

這樣以來,如果我們要獲取某一個用戶的登陸情況,就可以非常的方便,因為該用戶的所有登陸記錄是按照ID聚集的存儲在一起的,這樣主存緩存一個頁面的數據可能就OK了,如果是非聚集存儲的,假如某個id的數據分散在100個頁面,那么主存就要緩存這100個頁面,效率可想而知。

總結

這篇文中一開始的構想是想從計算機操作系統的存儲系統和B-Tree入手寫的,結果寫著寫著發現,有點不太現實,一來文章長度可能增加幾倍,二來可能自己都寫暈了,既然是小白篇嘛,就先來個綜述吧!總之索引是非常強大而且有意思的,然而當數據量達到一定量時,感覺索引也是有點乏力,但是盡量用好每一個索引是非常有必要而且是一種態度。

責任編輯:李英杰 來源: 博客園
相關推薦

2010-05-27 17:57:09

Svn使用入門

2020-10-28 07:08:03

Linux零拷貝內核

2011-07-11 13:11:54

MySQL索引數據結構

2021-04-22 22:26:13

Java語言IT

2018-08-16 09:29:26

2019-10-31 08:00:00

機器學習人工智能AI

2010-08-31 11:30:26

vSphere服務器虛擬化VMware

2017-02-17 08:58:54

微服務架構

2019-10-12 15:06:02

MySQL數據庫命令

2011-05-24 13:08:51

理光復合機

2010-09-14 16:54:18

2020-02-26 16:52:24

Redis高性能數據庫

2009-11-05 15:47:37

CCNP學習筆記

2012-06-15 10:13:03

2021-03-18 08:53:44

MySQL數據庫索引

2021-12-29 07:01:53

Mysql復合索引

2025-04-14 00:00:00

MCPjson 信息地理編碼

2025-02-10 11:11:47

2022-03-03 09:05:17

索引MySQL數據查詢

2010-06-01 13:25:59

視頻會議高速公路捷思銳科技
點贊
收藏

51CTO技術棧公眾號

亚洲一区二区三区四区在线免费观看| 免费网站www在线观看| 国产精品www色诱视频| 欧美一区二区视频免费观看| 99在线欧洲视频| 99在线热播精品免费| 精品一区二区成人免费视频| 狠狠色综合日日| 精品人妻人人做人人爽| 在线播放色视频| 国产成人免费高清| 国产91精品精华液一区二区三区| 欧美激情视频网址| 成人激情自拍| 欧美激情亚洲综合一区| ccyy激情综合| 国产欧美婷婷中文| 成人激情免费电影网址| 国产不卡在线播放| 欧美中文在线| 欧美高潮视频| 国产成人在线视频网站| 免费看污污视频| 国产一区二区女| 黄色国产小视频| 精品久久久久久中文字幕一区奶水| 免费动漫网站在线观看| 91精品久久久久久久99蜜桃| 国产91在线播放精品| 五月婷婷六月丁香激情| 亚洲精品xxx| 鲁鲁视频www一区二区| 女人天堂亚洲aⅴ在线观看| 杨幂一区欧美专区| 亚洲综合在线免费观看| 欧美女同一区| 国产精品久久久久久影视| 久久久久久免费看| av资源站一区| 99久久99热这里只有精品| 三级在线免费看| 国产字幕视频一区二区| 国产精品第12页| 欧美一级精品大片| 欧洲美女日日| 少妇激情一区二区三区| 欧美一区二区在线免费观看| 欧美wwwwww| 亚洲一区二区三区免费视频| 福利一区福利二区| 亚洲自拍与偷拍| 欧美成人三区| 国产成人拍精品视频午夜网站| 麻豆国产精品一区二区三区 | 香蕉国产精品| 成人动漫视频在线| 亚洲欧美偷拍自拍| 亚洲综合偷拍欧美一区色| 色资源二区在线视频| 999热视频| 亚洲国产欧美日韩另类综合| 欧美日韩精品一区二区视频| 在线看黄网站| caoporen国产精品| 伊人婷婷欧美激情| 日韩天堂在线观看| 亚洲国产精品99久久久久久久久| 国产91九色视频| 66视频精品| 亚洲一级免费观看| 欧美激情精品久久久久久变态| 欧美色视频在线| 久久黄色美女电影| 超碰97网站| 精品二区三区线观看| 久久五月天小说| 精品亚洲综合| 色偷偷偷综合中文字幕;dd| 毛片在线视频观看| 香蕉影视欧美成人| 精品久久久久久久久久久下田| 狠狠操精品视频| 国产+成+人+亚洲欧洲| 色婷婷综合激情| 日韩二区在线观看| 欧美a一级片| 妞干网在线播放| 一级片免费在线观看| 爆操妹子视频在线观看| 国产高清在线精品| 国产第一页在线视频| 青春草国产视频| 91黄色精品| 日韩av有码在线| 成人少妇影院yyyy| 久久99精品久久久久久园产越南| 男人添女人下面免费视频| 日本啊v在线| www.超碰在线| 午夜视频一区二区| 久久丝袜视频| 一级片免费看| 国产香蕉一区二区三区| 亚欧美无遮挡hd高清在线视频 | 黄视频网站在线观看| 国产精品永久免费观看| 久久精品magnetxturnbtih| av日韩免费电影| 在线观看特色大片免费视频| 成人h猎奇视频网站| 91精品国产色综合久久不卡电影| 99精品视频免费在线观看| 欧美久久一区| 国产在线日韩精品| 日本精品视频| 日韩国产大片| av在线日韩| 国产精品av一区| 免费在线毛片| 香蕉久久aⅴ一区二区三区| 国产精品免费在线免费| 亚洲成人久久电影| 日韩欧美精品中文字幕| 亚洲第一搞黄网站| 午夜精品久久久久久久蜜桃app| 国产日韩精品一区二区三区| 国产成人精品在线看| 超碰成人97| 亚洲第一精品夜夜躁人人躁| 麻豆成人免费电影| 北条麻妃在线一区二区免费播放 | 欧美.www| 欧美一级大胆视频| 日韩在线一二三区| 久久午夜国产精品| 米奇777在线影院线| 精品奇米国产一区二区三区| 蜜桃精品在线| 国产乱肥老妇国产一区二| 成人激情免费视频| 国产91精品入口17c| va亚洲va日韩不卡在线观看| 午夜精品久久久久久久99热| 伊人久久亚洲热| 国产福利电影| 欧美激情xxxx| 国产午夜亚洲精品午夜鲁丝片| 永久免费在线观看视频| 91热福利电影| 午夜a成v人精品| 99re热这里只有精品视频| 亚洲精品日韩精品| 国产欧美日韩丝袜精品一区| 日本精品免费观看| 亚洲人成电影网站色www| 欧美一三区三区四区免费在线看| 国产精品自拍毛片| 国产精品白丝av| 国产精品www994| 精品一区二区三区在线播放视频 | 亚洲自拍偷拍二区| 污污污污污污www网站免费| 国产xxxxx在线观看| 亚洲国产精品成人天堂| 精品免费日产一区一区三区免费| 正在播放久久| 国产精品欧美日韩久久| 国产一区二区三区奇米久涩| 少妇高潮大叫好爽喷水| 成人黄色一区二区| 黄色一级片视频| 波多野吉衣av| 红桃av在线播放| av小片在线| 亚洲风情在线资源| 91福利在线免费| 欧美码中文字幕在线| 欧美aaaaaaaa| 亚洲成人最新网站| 成人一区在线看| 色嗨嗨av一区二区三区| 久久精品国产成人精品| 国产九九精品视频| 奇米影视四色在线| 正在播放一区| 亚洲免费在线精品一区| 国产国语**毛片高清视频| 97精品国产综合久久久动漫日韩 | 成人免费视频免费观看| 樱花草国产18久久久久| 久久成人精品一区二区三区| 日韩欧美视频第二区| 婷婷色在线资源| 国产裸体歌舞团一区二区| 日韩第一页在线| 久久精品aaaaaa毛片| 免费高清完整在线观看| 欧美综合在线视频观看 | 欧美freesex| 蓝色福利精品导航|