MySQL SQL調優之索引

本篇記錄MySQL的索引知識學習筆記,也方便本身之後查找複習程序員

1、索引的概念
MySQL官方給出的索引定義:索引(Index)是幫助MySQL高效獲取數據的數據結構。因此說索引就是排好序的快速查找數據結構數據結構

2、索引分類
MySQL的索引能夠分爲幾種:架構

單值索引:單值索引就是隻包含一個列的索引
惟一索引:惟一索引要求索引列的必須是惟一的,好比說主鍵或者unique索引,可是仍是容許空值
複合索引:複合索引就是包含多個列組成的索引
3、索引用法
建立索引
create [unique] index indexName on tableName(columnName(length));
好比給dept表建立索引idx_dept_id
create idx_dept_id on dept(id);
修改索引
ps:修改索引也能夠用於新增索引
語法:併發

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的索引結構能夠分爲:ide

BTree索引
Hash索引
full-text全文索引
R-Tree索引高併發

從圖能夠看出BTree索引的結構其實就是一棵B+樹,並不必定是二叉樹,也有多是一棵多叉樹,MySQL也是分爲段區塊這種結構的,如圖,淺藍色部分就是一個磁盤塊,藍色部分表示數據項,而黃色部分表示指針工具

假如我要查找29這個值,就是遍歷下來,分別查找磁盤塊一、磁盤塊三、磁盤塊8,根據指針查找下來,速度很是快,假若有幾百萬數據的話,能走索引的狀況,是很是快的,性能對比可想而知性能

注意:只有葉子節點(最下面的節點)是存儲要查找的數據的,非葉子節點存儲的數據只是用於指針索引的數據項而已學習

5、索引適用的狀況
一、頻繁用於查詢的條件適合創建索引
二、主鍵默認要加上Primary索引
三、和其它表有外鍵關係的列創建索引
四、where條件後面的條件列能夠建上索引
五、用於排序order by的列能夠加上索引
六、用於分組group by的列能夠加上索引
注意:須要常常修改的列不適合創建索引,由於更新數據的同時也會從新構建索引,比較耗性能;在高併發的狀況,更傾向於創建組合索引,由於通常來講,查詢不多有一個條件,通常是多個條件,複合索引比較適合指針

6、索引不適用的狀況
一、須要常常增刪改的表
二、表的記錄不多的狀況,加了索引效果不明顯
三、若是某個數據列包含不少重複的數據,好比用戶信息表的性別這個列,通常只有兩種狀況,因此加了索引,是沒有太大的實際效果的
注意:索引應該加在常常查詢或者排序的列,數據重複並且分佈很平均的狀況,是不適合加索引的

 

程序員工具站點:草根工具www.idevtool.com  

我的筆記站點:草根筆記note.idevtool.com

相關文章
相關標籤/搜索