日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

MySQL 索引方式

發布時間:2025/3/21 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL 索引方式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

MySQL 索引方式 博客分類: 數據庫 本文配圖來自《高性能MySQL(第二版)》。

在數據庫中,對性能影響最大的幾個策略包括數據庫的鎖策略、緩存策略、索引策略、存儲策略、執行計劃優化策略。
索引策略決定數據庫快速定位數據的效率,存儲策略決定數據持久化的效率。
MySQL中兩大主要存儲引擎MyISAM和InnoDB采用了不同的索引和存儲策略,本文將分析它們的異同和性能。

MySQL主要提供2種方式的索引:B-Tree(包括B+Tree)索引,Hash索引。
B樹索引具有范圍查找和前綴查找的能力,對于N節點的B樹,檢索一條記錄的復雜度為O(LogN)。
哈希索引只能做等于查找,但是無論多大的Hash表,查找復雜度都是O(1)。
顯然,如果值的差異性大,并且以等于查找為主,Hash索引是更高效的選擇,它有O(1)的查找復雜度。如果值的差異性相對較差,并且以范圍查找為主,B樹是更好的選擇,它支持范圍查找。


Hash索引各種引擎大同小異,沒有太多可探討性,本文主要討論不同形式的B樹索引。

B樹屬于二叉平衡樹,平衡樹就是任何一個節點的左右節點高度差距不能超過1的樹,這才是絕對平衡的樹。
平衡樹比較好的算法是AVL,它通過左旋、右旋及其組合的操作可以保證樹絕對平衡。
下面是AVL算法中的全部旋轉操作:

平衡樹處在任何一個左邊的不平衡狀態都可以通過相應的旋轉操作轉移到右邊的平衡狀態。

數據庫采用的B樹只在葉子節點記錄信息,非葉子節點記錄的是范圍信息,這是與一般搜索樹不同的地方(一般搜索樹非葉子節點也記錄信息)。
這是一個B+樹的結構,InnoDB的索引都采取了這種形式,它在B-樹的基礎上為每個葉子節點加了一個指針指向下一個葉子節點,這樣可以快速的進行范圍查找。
MyISAM是否也是B+樹我還不能確定,但是B-樹我沒有想到可以快速進行范圍查找的方法,應該也是B+樹。


例如這個B+樹的例子:

如 果我要查找名字以A開頭的全部信息,我只要獲取第一個葉子節點,然后順序沿著指向下一個葉子的指針,直到發現當年葉子節點已經不是以A開頭則中止,這樣只 要搜索到第一個葉子節點(O(LogN))再沿著指針檢索(O(N)),就可以獲取全部索引,如果N個節點的表掃描M個連續值,就是 O(LogN)+O(M),如果B-樹則需要回溯到上層節點,這樣最差的效率是O(LogN)*M。

對于InnoDB,使用了一種改進的B+樹索引,稱為聚集索引(Clustered Index),它的不同之處在于索引上不僅有索引值的信息,還有整個索引值所在行的信息,免去了一次通過索引值上的位置去取整行的操作。


假 設我們有個表有(col1,col2)列,col1是主鍵,col2也建立索引。那么在MyISAM引擎中,文件會被這樣記錄,因為MyISAM是按插入 順序把數據寫入文件。如果有刪除則空出位置,再次插入如果可以放下則會填充空白,對于不定長的行,存儲引擎都會在分頁中預留位置,以供更新更長的值(一般 是VARCHAR),放不下則會添加到文件結尾,并從原位置刪除。所以有時候會有空間浪費,需要Optimize Table來優化。
因此: 定長的行比不定長的行效率高!把定長數據和不定長數據分開存儲,很多時候可以提高效率。


再來看MyISAM的主鍵索引,索引Key是主鍵值,索引Value是行的文件位置,通過這個位置可以直接讀取行。從這個圖上來看,MyISAM也是采用B+樹。


MyISAM的非主鍵索引,跟逐漸索引沒有不同,也是索引行的文件位置。


再看InnoDB的主鍵索引,索引Key是主鍵值,索引Value是整行的數據。


InnoDB的非主鍵索引,索引Key是列值,索引Value是主鍵值。


對比MyISAM和InnoDB的索引策略:

可以發現MyISAM所有列的索引都是一樣,索引Key是列值,索引Value是行的文件位置。
InnoDB的主鍵索引包含了行的全部信息,索引Key是主鍵值,索引Value是整行的值。而非主鍵索引索引Key是列值,索引Value是主鍵值,取數據時到主鍵索引中取。

并且在InnoDB中,一個聚集索引是必須的,如果沒有定義主鍵,InnoDB也會自己隱含的建立一個聚集索引作為主鍵,因為InnoDB的主鍵索引還有個重要的功能就是行鎖,這在我的 另一篇文章 中分析過。

再來看看我們插入值時會發生什么:

InnoDB會按主鍵索引順序組織文件,如果按主鍵順序插入,可以直接在最尾部加入。并且只填充頁面的15/16,這樣可以預留部分空間以供行修改,這樣組織的數據是非常緊湊的。

如果主鍵不是順序的,我們來看看會發生什么,因為要按主鍵順序存放,數據會被不斷地移動,調整頁面。

所以: InnoDB引擎按主鍵順序插入記錄是非常必要的,否則性能將會面臨很大風險 http://blog.csdn.net/habout632/article/details/7611111

轉載于:https://my.oschina.net/xiaominmin/blog/1599190

總結

以上是生活随笔為你收集整理的MySQL 索引方式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 91免费观看网站 | 伊人青青草 | 强伦人妻一区二区三区视频18 | 免费簧片在线观看 | 成人影| 91麻豆成人精品国产 | 99热思思 | 激情成人综合 | 自拍视频一区二区 | 久草久热| 啪啪短视频 | 爱情岛论语亚洲入口 | 蜜桃成人在线观看 | 久久午夜影视 | 天天爱天天舔 | 精品人妻一区二区三区含羞草 | 欧美鲁| 青青草视频在线观看 | 成人国产片女人爽到高潮 | 少妇裸体视频 | 欧美第一精品 | 人妻久久久一区二区三区 | 91精品国产aⅴ一区二区 | 在线观看黄网 | 看黄色的网站 | 欧美50p| 人妻射精一区二区 | 久久神马影院 | 欧美一区二区免费电影 | 亚洲妇熟xx妇色黄蜜桃 | 久久艹艹 | 久久重口味 | 天堂国产精品 | 综合色影院 | 国产精品自拍片 | 亚洲欧美综合一区二区 | 欧美又粗又大aaa片 老熟妇仑乱视频一区二区 亚洲妇女体内精汇编 | 91丨九色丨蝌蚪丨老版 | 91福利影院 | 国产成人精品久久二区二区91 | 精品国产乱码久久久久久1区二区 | 欧美日韩www | 国产中文字幕网 | 色欲久久久天天天精品综合网 | 亚洲97| 久久免费视频播放 | 男女黄色片 | 色花av| 日韩欧美123 | 欧美日韩国产精品一区二区三区 | 亚洲一区日本 | www.蜜臀| 国产三级观看 | 欧美日韩一区二区三区在线视频 | 日韩一区二区欧美 | av色噜噜| 偷拍中国夫妇高潮视频 | 毛片黄色片 | 91本色 | 老司机午夜福利视频 | 女人十八毛片嫩草av | 日本电影成人 | 免费在线小视频 | 在线观看成人免费视频 | 亚洲三级免费观看 | 国产日韩亚洲 | 免费污网站在线观看 | 青青青国产精品一区二区 | av综合色| 1024手机在线观看 | 日韩精品视 | 国产女主播一区二区 | 91色网站 | 日本色影院| 国产在线观看黄色 | 日韩一区在线播放 | 亚洲av成人精品毛片 | 午夜影视福利 | japanese在线观看 | 久久婷婷精品 | 中日韩精品在线 | 香港三日本8a三级少妇三级99 | 日韩国产欧美一区二区三区 | 欧美日韩综合视频 | 久久九九色 | 亚洲中文字幕视频一区 | 中文在线观看免费高清 | 欧美999| 黑人无套内谢中国美女 | 免费在线一区二区三区 | 免费看a网站 | 插插插av| 免费观看毛片视频 | 免费淫片 | 午夜精品网| 免费看特级毛片 | 噜噜噜亚洲色成人网站 | 三级免费 | 久久.com|