MySQL系列之索引知識學習筆記

2021-09-27 03:11:47 字數 1875 閱讀 1263

繼我的上篇部落格:oracle索引知識學習筆記,再記錄一篇mysql的索引知識學習筆記,本部落格是我在學習尚矽谷的學習教程後,做的筆記,當然我不是為了所謂宣傳,僅僅是學習記錄的筆記。本來可以不分享出來,不過,分享出來的筆記不僅可以給網上的學習者參考學習,同時寫在csdn比較方便,可以支援上傳,也方便自己以後查詢複習

mysql官方給出的索引定義:索引(index)是幫助mysql高效獲取資料的資料結構。所以說索引就是排好序的快速查詢資料結構

mysql的索引可以分為幾種:

create [unique] index indexname on tablename(columnname(length));
比如給dept表建立索引idx_dept_id

create index idx_dept_id on dept(id);
語法:

alter tablename add [unique] index indexname on columnname(length);
drop index indexname on tablename;
show index from tablename ;
如果要顯示換行可以加上\g,不過就不能加上分號

show index from tablename \g
# 新增乙個主鍵,主鍵是唯一的,不能為null

alter table tablename add primary key(columnname);

#建立唯一索引,要求索引唯一,不過允允許空值

alter table tablename add unique index indexname on(columnname);

# 建立普通的索引,索引資料可以不唯一

alter table tablename add index indexname on(columnname);

# 指定索引為fulltext,用於全文索引

alter table tablename add fulltext indexname on(columnname);

mysql的索引結構可以分為:

引用尚矽谷mysql教程的圖,本部落格只介紹btree索引的

從圖可以看出btree索引的結構其實就是一棵b+樹,並不一定是二叉樹,也有可能是一棵多叉樹,mysql也是分為段區塊這種結構的,如圖,淺藍色部分就是乙個磁碟塊,藍色部分表示資料項,而黃色部分表示指標

假如我要查詢29這個值,就是遍歷下來,分別查詢磁碟塊1、磁碟塊3、磁碟塊8,根據指標查詢下來,速度非常塊,假如有幾百萬資料的話,能走索引的情況,是非常快的,效能對比可想而知

注意:只有葉子節點(最下面的節點)是儲存要查詢的資料的,非葉子節點儲存的資料只是用於指標索引的資料項而已

注意:需要經常修改的列不適合建立索引,因為更新資料的同時也會重新構建索引,比較耗效能;在高併發的情況,更傾向於建立組合索引,因為一般來說,查詢很少有乙個條件,一般是多個條件,復合索引比較適合

注意:索引應該加在經常查詢或者排序的列,資料重複而且分布很平均的情況,是不適合加索引的

引用尚矽谷老師的歸納:

Mysql系列之索引篇

為了提高資料庫的查詢效率,然後我們會給一些字段增加索引,但是大家有沒有考慮過,索引是什麼?我們為什麼要用索引?增加了索引就一定快嗎?如何實現按照索引查詢呢?索引的資料結構有哪些呢?它分為哪幾類呢?大家別懵,下面就深入去探個究竟吧!索引是為了加快對錶中資料行的檢索而建立的一種分散儲存的資料結構 通俗來...

知識積累 MYSQL之索引

檢視索引 show index from tablename 建立復合索引 create unique index indexname on tablename column1,column2,column3 建立復合唯一索引 alter table tablename add unique ind...

mysql索引知識 mysql索引必會知識點

聚簇索引和非聚簇索引 主要區別在於組織索引的結構是否和資料儲存的結構一樣。一般再innodb中主鍵索引就是聚簇索引,沒有主鍵會預設生成隱藏主鍵字段。理論上也可以指定其他欄位為聚簇索引,聚簇索引也不必唯一。主鍵索引和普通索引 我們都知道,innodb引擎下的儲存結構為b 樹,也就是說首先根據key值一...