MySQL學習筆記(十)-MySQL索引
阿新 • • 發佈:2020-12-09
MySQL學習筆記-MySQL索引
作者:就叫易易好了
日期:2020/12/08
什麼是索引?
索引(index)是幫助MySQL高效獲取資料的資料結構,可以得到索引的本質。
好處:提高查詢效率
索引需要維護,維護索引需要耗費時間,所以索引並不是越多越好。
假如,如果我們需要查詢‘mysql’,首先要定位到m字母,然後再找到剩下的sql。
可以理解為排好序的快速查詢資料結構
索引的優勢:
- 類似大學圖書館建書的索引提高資料檢索的效率,降低資料庫的IO成本
- 通過索引列對資料進行排序,降低排序成本,降低CPU的消耗。
索引的劣勢:
- 索引雖然大大提高了查詢速度,同時卻會降低更新表的速度,比如對錶格進行INSERT,UPDATE或者DELETE,因為更新表時,MySQL不僅要儲存資料,還要儲存一下索引檔案每次更新新增的索引列的欄位。
索引分類:
- 單值索引:一個索引只包含單個列,一個表可以有多個單列索引
- 唯一索引:索引列的值必須唯一,但允許有空值。
- 複合索引:一個索引包含了多個列
當在表中建立了primary key約束或unique約束時,MySQL會自動地建立一個唯一索引。
基本語法:
建立:
1、CEATE INDEX 索引名 ON 表名
2、ALTER 表名 ADD INDEX(索引名) ON ……
刪除:
DROP INDEX(索引名) ON 表名
檢視:
SHOW INDEX FROM 表名
案例:
建立一個普通索引:
CREATE table BOOKS ( bkID int not null, bkName varchar(30), bkAuthor varchar(30), bkPrice decimal(3,1), bkYear year not null, index(bkYear) -- 在bkYear上建立一個普通索引 );
檢視索引:
show index from BOOKS;
通過以下語句可以檢視建表時的命令:
show create table BOOKS;
建立一個唯一索引:
DROP table if exists BOOKS;
CREATE table BOOKS
(
bkID int not null,
bkName varchar(30),
bkAuthor varchar(30),
bkPrice decimal(3,1),
bkYear year not null,
unique index(bkYear) -- 在bkYear上建立一個唯一索引
);
建立一個複合索引:
DROP table if exists BOOKS; CREATE table BOOKS ( bkID int not null, bkName varchar(30), bkAuthor varchar(30), bkPrice decimal(3,1), bkYear year not null, index compositeIndex(bkID,bkName,bkAuthor)-- 組合索引 );