MySQL索引實踐

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

結果
![在這裏插入圖片描述](https://img-blog.csdnimg.cn/20200610205635992.png
在這裏插入圖片描述
可以看到typeALL表明沒有用到索引,rows=4,掃描了全部數據4行

給學號列創建索引

CREATE INDEX idx_學號
	ON students(`學號`);

查看索引
在這裏插入圖片描述
(或使用

SHOW INDEX 
FROM
	students;

查看)
在這裏插入圖片描述
可以看到成功創建了學號列索引,索引類型是BTREE(Innodb和MyISAM默認的索引是Btree索引;而Mermory默認的索引是Hash索引。我們在mysql中常用兩種索引算法BTree和Hash,兩種算法檢索方式不一樣,對查詢的作用也不一樣)

創建唯一索引就在CREATEINDEX中添加一個UNIQUE標識

CREATE UNIQUE INDEX idx_學號
	ON students(`學號`);

這樣學號就不能重複了

繼續用EXPLAIN分析

EXPLAIN SELECT * FROM students WHERE `學號` = 2006001;

結果
在這裏插入圖片描述
在這裏插入圖片描述
可以看到typeref,關於type詳解可以到MySQL explain的使用中查看
possiable_keys(可能用到的和)key(實際用到的)均爲剛剛創建的學號列索引,rows=1,說明建立索引後只掃描了一行

2.刪除索引

DROP INDEX idx_學號
	ON students;

執行後發現索引就被刪除了,只剩下主鍵索引
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章