MySQL性能優化(三)-- 索引

1、什麼是索引及索引的特色

索引是一種數據結構mysql

索引的特色:查找速度快,排好序,數據結構程序員

索引的數據結構類型有:BTREE索引和HASH索引,下面展現的是BTREE索引。sql

BTREE:balance tree (平衡樹)數據庫

BTREE的特色實例:數據結構

假設有一張表,表中的數據爲下圖中的左側,則索引中數據爲下圖中的右側:框架

img

若是查詢id爲9,name爲ii的,在表中須要查詢9次,可是在二叉樹中須要查詢3次。指針

2、索引的「類型」

1.彙集索引:節點就是數據自己,即索引表中存的就是數據自己cdn

2.非彙集索引:節點仍然是索引節點,只不過有指向對應數據塊的指針,上面所說的BTREE索引就是非彙集索引blog

彙集索引的速度比非彙集索引快。排序

3、索引的類型

1.單列索引(一個索引只包含一個列,一個表能夠有多個單列索引)

1-1.主鍵索引:primary key

建立主鍵索引,有兩種方式,其中t1和t2位表名,id爲列:

1)建表的時候建立:create table t1 (id int primary key);

2)經過alter語句:alter table t2 add primary key(id);

1-2.普通索引:index,最基本的索引

建立普通索引:

(1)create index 索引名 on 表(列),

例如: create index idx_id on t3(id);

(2)經過alter語句:alter table t4 add index(id);

1-3.惟一索引:unique

建立惟一索引:

(1)建表的時候建立:create table t5 (id int unique);

(2)create unique index 索引名 on 表(列),

例如:create unique index idx_id on t5(id);

注意:unique的字段能夠爲null,也能夠重複,「」不能夠重複出現。

1-4.全文索引:fulltext

數據庫自帶的全文索引,對中文支持不友好,能夠藉助第三方的框架,如:sphinx(斯芬克斯)、coreseek

2.多列索引(組合索引,一個組合索引包含兩個或兩個以上的列)

建立:create index idx_列名1_列名2 on 表名(列名1,列名2)

實例:

建表:create table student(id int,name varchar(20),address varchar(20),remark varchar(20));

建組合索引:create index idx_name_address_remark on student(name,address,remark);

查詢sql是否使用到了索引,可使用explain進行分析,後續會給出介紹。

在使用查詢的時候遵循mysql組合索引的「最左前綴」,where時的條件要按創建索引的時候字段的排序方式,下面都是基於多列索引講述的:

一、不按索引最左列開始查詢

(1) where address='深圳' 不會走索引  

img

(2)where address = '深圳' and remark='程序員' 不會走索引  

img

二、查詢中某個列有範圍查詢,則其右邊的全部列都沒法使用查詢(多列查詢)

where name='xbq' and address like '%深%' and remark='程序員' ,該查詢只會使用索引中的前兩列,由於like是範圍查詢

img

三、查詢中第一個索引字段出現like '%xxx%'或者'%xxx',不會走索引

img

4.查詢中多條件用or鏈接,此類型和1類似

img

那麼對於索引怎麼刪除呢?刪除索引:alter table 表名 drop index 索引名稱

查詢索引有兩種方式:

  • show index from t1;
  • show keys from t1;

4、索引的優勢和缺點

優勢:

1.能夠經過創建惟一索引或者主鍵索引,保證數據庫表中每一行數據的惟一性.

2.提升檢索速度,下降磁盤讀取IO

索引是排序好的,不須要進行全表掃描,下降了數據排序的運算成本,也就是下降了CPU的消耗

缺點:

1.索引也須要存儲,因此也須要空間,實際上索引也是一張表,保存了索引字段的值和指向實體表的指針

2.下降更新(增刪改)表的速度,更新不單單只是數據自己,若是數據正好是索引字段,同時須要更新索引信息

當索引字段對應的數據改變了,則索引表也會改變,例如,當圖書館中 的書櫃和書,書的類型爲科普類,書櫃上的目錄也是科普類,

當此書櫃中的書改變了位置的時候,則對應的書櫃的目錄表也要改變。

歡迎關注個人公衆號,第一時間接收最新文章~ 搜索公衆號: 碼咖 或者 掃描下方二維碼:

img
相關文章
相關標籤/搜索