1. 程式人生 > >mysql索引型別和索引方式

mysql索引型別和索引方式

1.什麼是索引

在MySQL中,索引(index)也叫做“鍵(key)”,它儲存引擎用於快速找到記錄的一種資料結構

2.索引的分類

在MySQL中,通常我們所指的索引型別,有以下幾種:

主鍵索引(PRIMARY KEY)

也簡稱主鍵。它可以提高查詢效率,並提供唯一性約束。一張表中只能有一個主鍵。被標誌為自動增長的欄位一定是主鍵,但主鍵不一定是自動增長。一般把主鍵定義在無意義的欄位上(如:編號),主鍵的資料型別最好是數值。

ADD PRIMARY KEY (`name`) USING BTREE;

全文索引(FULL TEXT)
舊版的MySQL的全文索引只能用在MyISAM表格的char、varchar和text的欄位上。
不過新版的MySQL5.6.24上InnoDB引擎也加入了全文索引
新增全文索引

ADD FULLTEXT INDEX `idx_full`(`en_name`);

跟普通索引稍有不同
使用全文索引的格式: MATCH (columnName) AGAINST (‘string’)
eg:

   SELECT * FROM `student` WHERE MATCH(`name`) AGAINST('聰')

常規索引(INDEX或KEY)

單列索引

 ALTER TABLE `testDB`.`user` 
 ADD INDEX `idx_name`(`name`) USING BTREE

組合索引

ADD INDEX `idx_mult`(`name`, `address`) USING BTREE

組合索引最左字首原則
例如上面我們建立了一個name, address的組合索引
select * from user where name = ‘xxx’ 此時,會走索引
select * from user where address = ‘xxx’ 則不會走索引

唯一索引(UNIQUE KEY)

ADD UNIQUE INDEX `idx_unique`(`en_name`);

主鍵是一種約束,唯一索引是一種索引,兩者在本質上是不同的。
主鍵建立後一定包含一個唯一性索引,唯一性索引並不一定就是主鍵。
唯一性索引列允許空值,而主鍵列不允許為空值。
主鍵列在建立時,已經預設為空值 + 唯一索引了。
主鍵可以被其他表引用為外來鍵,而唯一索引不能。
一個表最多隻能建立一個主鍵,但可以建立多個唯一索引。
主鍵更適合那些不容易更改的唯一標識,如自動遞增列、身份證號等。

NAVICAT中的索引型別

3.索引方式

一般有四種索引方式
BTREE,RTREE, HASH ,FULLTEXT。
BTREE索引就是一種將索引值按一定的演算法,存入一個樹形的資料結構中
BTREE又分兩種,一種是B-TREE,如下圖
B-Tree
另外一種是B+TREE,結構如下圖
B+Tree
B+Tree相對於B-Tree有幾點不同:

  1. 非葉子節點只儲存鍵值資訊。
  2. 所有葉子節點之間都有一個鏈指標。
  3. 資料記錄都存放在葉子節點中。

BTREE在MyISAM裡的形式和Innodb稍有不同
在 Innodb裡,有兩種形態:一是primary key形態,其leaf node裡存放的是資料,而且不僅存放了索引鍵的資料,還存放了其他欄位的資料。二是secondary index,其leaf node和普通的BTREE差不多,只是還存放了指向主鍵的資訊.
而在MyISAM裡,主鍵和其他的並沒有太大區別。不過和Innodb不太一樣的地方是在MyISAM裡,leaf node裡存放的不是主鍵的資訊,而是指向資料檔案裡的對應資料行的資訊.