1.什麼是索引
索引是一種特殊的數據結構,類似於圖書的目錄,它能夠極大地提升數據庫的查詢效率。如果沒有索引,那麼在查詢時必須掃描表中的所有記錄才能找出符合條件的記錄,這種全表掃描查詢效率非常低。
2.常見索引的種類
索引是對數據庫表中一列或多列的值進行排序的一種結構,使用索引可快速訪問數據庫表中的特定記錄。
索引種類 | 描述 |
---|---|
普通索引 | 最基本的索引,沒有任何限制,僅加速查詢 |
唯一索引 | 索引列的值必須唯一,但允許有空值 |
主鍵索引 | 一種特殊的唯一索引,不允許有空值。一般是在建表的同時自動創建主鍵索引 |
複合索引 | 兩個或多個列上的索引被稱作複合索引 |
全文索引 | 對文本內容進行分詞索引 |
3.索引的使用
1.創建索引
首先創建一張表students
DROP TABLE
IF
EXISTS students;
CREATE TABLE students (
id INT ( 10 ) UNSIGNED NOT NULL AUTO_INCREMENT,
學號 INT ( 7 ) UNSIGNED NOT NULL,
姓名 VARCHAR ( 20 ) NOT NULL,
PRIMARY KEY ( `id` )
) ENGINE = INNODB DEFAULT CHARSET=utf8;
插入數據
INSERT INTO students ( 學號, 姓名 )
VALUES
( 2016001, '張三' ),
( 2016002, '李四' ),
( 2016003, '王五' ),
( 2016004, '吳六' );
表如圖
用EXPLAIN查詢分析學號爲201601的語句
EXPLAIN SELECT * FROM students WHERE `學號` = 2006001
結果
可以看到type爲 ALL表明沒有用到索引,rows=4,掃描了全部數據4行
給學號列創建索引
CREATE INDEX idx_學號
ON students(`學號`);
查看索引
(或使用
SHOW INDEX
FROM
students;
查看)
可以看到成功創建了學號列索引,索引類型是BTREE(Innodb和MyISAM默認的索引是Btree索引;而Mermory默認的索引是Hash索引。我們在mysql中常用兩種索引算法BTree和Hash,兩種算法檢索方式不一樣,對查詢的作用也不一樣)
創建唯一索引就在CREATE和INDEX中添加一個UNIQUE標識
CREATE UNIQUE INDEX idx_學號
ON students(`學號`);
這樣學號就不能重複了
繼續用EXPLAIN分析
EXPLAIN SELECT * FROM students WHERE `學號` = 2006001;
結果
可以看到type爲ref,關於type詳解可以到MySQL explain的使用中查看
possiable_keys(可能用到的和)key(實際用到的)均爲剛剛創建的學號列索引,rows=1,說明建立索引後只掃描了一行
2.刪除索引
DROP INDEX idx_學號
ON students;
執行後發現索引就被刪除了,只剩下主鍵索引