Mysql mysql索引的一些理解

2021-10-22 17:28:38 字數 1134 閱讀 2907

1.索引:索引是幫助mysql高效獲取資料的排好序的資料結構;

2.索引的資料結構:

col1

col2134

277491

522689

723上面**假設是mysql資料庫中一張表,我們執行select * from t where t.col1=6,毫無疑問需要執行6次和磁碟i/o,才能找到我們需要的值。極大的浪費效能,假如我們使用二叉樹資料結構建立索引,我們都知道二叉樹的儲存資料的時候右邊的值大於左邊,我們會得到如下結構:

使用二叉樹儲存遞增德索引會變成乙個列表,如果執行上面的語句查詢col1為6的話,同樣還是執行6次,所以mysql底層是不使用二叉樹來維護索引結構的。

如果使用紅黑樹來儲存索引資料結構,會變成如下結果:

紅黑樹也滿足二叉樹的特性,所以又稱為二叉平衡樹,當分支的資料比較多的時候,會自動平衡樹缺點是如果資料量大的話,葉子節點就會特別多,層級也會特別多,查詢的時候還是會浪費效能。mysql早期版本使用過紅黑樹,後來的版本就沒使用過。

辦法總比困難多,如果橫向能儲存更多的元素的話,樹的高度就會越小。

b-tree的特點:

b樹和b+樹的區別:

b樹沒有維護指標,沒辦法支撐範圍查詢,沒有冗餘索引,同等大小的情況下儲存更多的索引,層級就會越小。

hash索引:陣列+鍊錶

為什麼建議innodb表表必須建主鍵,並且推薦使用整型的自增主鍵?

如果不建立主鍵的話,mysql會自動找一列(唯一索引)組織資料,如果沒有找到的話,mysql會自動維護乙個隱藏列組織資料,如果這些事情我們不做的話,全是mysql幫我們做了,而我們優化的時候就是要mysql少做一些額外的工作,所以我們建表的時候需要維護乙個主鍵,因為b+樹儲存索引是從左往右依次遞增,如果設定成uuid的話,還得比較大小再去維護資料,這大大增加了mysql的工作,所以我們一般是bigint自增。

資料庫表設定乙個索引就會維護乙個b+樹,增加刪除都需要去維護,所以我們不需要過多的設定索引。盡量使用聯合索引。

學習mysql mysql的一些基礎命令

在windows下安裝完mysql5.6版本後 先將mysql bin資料夾配入到環境變數中方便全域性使用 再以管理員許可權開啟終端執行mysqld命令,啟動mysql服務端 最後執行mysql命令,啟動mysql客戶端。windows查詢 關閉程序 查詢 tasklist findstr 程序名 ...

索引的一些jingyan

為什麼要加索引?提高查詢效率 類似乙個字典裡 新增了目錄 索引的分類 一 普通索引 二 唯一索引 可以是組合索引。索引可以是空,必須唯一,不一定是主鍵 三 全文索引 一般用在搜尋文章內容,避免用like 四 組合索引 最左字首 比如乙個組合索引是title 50 time 10 這時where條件中...

索引的一些思考

一 索引是什麼?答 索引是一種資料結構,它和表中的列有對應關係,索引是有序的,但資料的物理排序不一定是按照索引的順序排列的。如果是按照索引排序的,則稱為聚集索引 如果不是,則稱之為非聚集索引。由於聚集索引會影響到資料的物理排序,所以每個表只能有乙個聚集索引,但可以有多個非聚集索引。例子解釋 1 cr...