1. 索引的分類
MySQL的索引包括普通索引,唯一性索引,全文索引,單列索引和空間索引.
- 從功能邏輯上說,索引主要分為普通索引,唯一索引,主鍵索引和全文索引.
- 按物理實現方式,索引可以分為聚簇索引和二級索引.
- 按作用字段個數進行劃分,分為單列索引和聯合索引.
(1). 普通索引
在創建普通索引時,不附加任何限制條件,只是用于提高查詢速度.這類索引可以創建在任何數據類型上,其值是否唯一或非空,要由字段本身的完整性約束條件決定.建立索引后,可以通過索引進行查詢.
(2). 唯一索引
使用UNIQUE參數可以設置唯一索引,在建立唯一索引時,限制該索引的值必須是唯一的.但允許是空值.在一張表里可以有多個唯一索引.
(3). 主鍵索引
主鍵索引是一種特殊的唯一性索引.在唯一約束的基礎上添加了非空的約束,一張表里只能有一個主鍵索引.這是由主鍵索引的物理實現方式決定的.因為數據存儲在文件中只能按照一種順序進行存儲.
(4). 聯合索引
聯合索引是在表的多個字段上創建一個索引,該索引指向創建的多個字段.可以通過幾個字段進行查詢,但查詢條件中使用這些字段的第一個字段時才會被使用.使用聯合索引時遵循最左前綴原則.
(5). 全文索引
使用參數FULLTEXT可以設置索引為全文索引.在定義索引的列上支持值的全文查找,允許在這些索引列中插入空值和重復值.全文索引只能創建在CHAR, VARCHAR, TEXT類型及其系列類型的字段上,查詢數據量較大的字符串類型的字段時,使用全文索引可以提高查詢速度.
(6). 小結
- InnoDB : 支持b+樹,full-text等索引,不支持hash索引.
- MyISAM : 支持b+樹,full-text等索引,不支持hash索引.
- Memory : 支持b+樹,hash索引等,不支持b+樹.
2. 創建索引
MySQL支持多種方法在單個或多個列上創建索引,在創建表的定義語句中CREATE TABLE中指定索引列,使用ALTER TABLE語句在已經創建的表中創建索引,或者使用CREATE INDEX語句在已經存在的表中添加索引.
(1). 創建表時添加索引
CREATE TABLE demo1(
demo1_id INT PRIMARY KEY AUTO_INCREMENT,
demo_fname VARCHAR(15) UNIQUE KEY,
demp_lname VARCHAR(20),
INDEX demo1_index_lname(demp_lname)
);
- 隱式的方式創建索引.在聲明有主鍵約束,唯一性約束,外鍵約束的字段上,會自動的添加相關的索引.
- 顯式的方式創建普通索引.
- 我們可以通過show index from 表名的方式來查看表中的索引.
- 我們只能在創建表時通過定義主鍵約束的方式隱式定義主鍵約束.
(2). 創建表后添加索引
CREATE TABLE demo2(
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20),
books VARCHAR(20)
);ALTER TABLE demo2 ADD INDEX demo2_index_books(books);ALTER TABLE demo2 ADD UNIQUE KEY demo2_uq_name(name);show index from demo2;
?