索引對于MySQL資料庫查詢速度具有無可取代的作用,一個合适的索引能給資料查詢的效率帶來巨大的提升,本文來給大家講講如何建立索引,索引的最佳建立方式是在建表的時候就确定好要索引的字段并建立好索引。
索引的類型
我們來回顧一下前文講到的索引的類型,有以下幾種:
1.普通索引(Normal):基本索引類型,允許在定義索引的列裡插入空值或重複值。
2.唯一索引(Unique):索引列值必須唯一,但允許有空值。如果是組合索引,則列值的組合必須唯一。主鍵索引是一種特殊的唯一索引,不允許有空值
3.單列索引:隻包含一個列的索引,一個表中可以有多個
4.組合索引:包含多個列的索引,查詢條件包含這些列的最左邊的字段的時候,索引就會被引用,遵循最左綴原則
5.全文索引(Full Text):在定義的值中支援全文查找,允許空值和重複值,可以在CHAR,VARCHAR或者TEXT字段類型上建立,僅支援MyISAM存儲引擎
6.空間索引:針對空間資料做的索引,支援的資料類型有4種,分别是GEOMETRY,POINT,LINESTRING和POLYGON。建立空間索引的列必須聲明為非空值(NOT NULL),僅支援MyISAM存儲引擎
建立普通索引
# 1.建立普通索引示例
CREATE TABLE test_1 (
id INT NOT NULL,
num INT NOT NULL,
test_name VARCHAR (50) NOT NULL,
INDEX (num) #此處為建立普通索引的指令行
);
建立表語句運作結果
# 2.接下來我們可以使用以下指令檢視剛建立的表的結構
SHOW CREATE TABLE test_1;
指令語句查詢結果
# 3.還可以使用MySQL的可是話管理工具檢視資料表的索引,本猿使用的是Navicat
navicat檢視所索引
# 4.接下來我們往表中插入兩條資料來用于檢視索引是否起到效果(注意一定要兩條資料以上才起作用)
測試資料
# 5.插入完資料後使用EXPLAIN指令檢視索引是否起作用
EXPLAIN SELECT * FROM test_1 WHERE num=1;
查詢結果
查詢結果的字段詳解
select_type:查詢類型,可能的值:SIMPLE,PRIMARY,UNION,SUNQUERY等table:表名,按被讀取的先後順序查詢type:與其他表的關系,可能的值:system,const,eq_ref,ref,range,index和Allpossible_key:搜尋記錄可選用的各個索引key:實際選用的索引key_len:索引按位元組計算的長度,ref:行給出關聯關系中另一個資料表裡的資料列的名稱rows:預計讀出的行數extra:與關聯操作相關的資訊建立唯一索引
# 1.建立唯一索引示例
CREATE TABLE test_2 (
id INT NOT NULL,
num INT NOT NULL,
test_name VARCHAR (50) NOT NULL,
UNIQUE INDEX UniqIdx (id) #這裡是建立唯一索引的指令行
);
建立表語句運作結果
# 2.檢視建立的表的表結構
SHOW CREATE TABLE test_2;
指令語句查詢結果
# 3.使用Navicat檢視建立的索引
Navicat檢視索引
建立單列索引
# 1.建立單列索引
CREATE TABLE test_3 (
id INT NOT NULL,
num INT NOT NULL,
test_name VARCHAR (50) NOT NULL,
INDEX SingleIdx (id) # 這裡是建立索引的指令行
);
建立表語句運作結果
# 2.檢視建立的表的表結構
SHOW CREATE TABLE test_3;
指令行查詢結果
# 3.使用Navicat檢視建立的索引
Navicat檢視索引
其他建立表時建立索引的關鍵指令行
# 1.組合索引
INDEX MultiIdx (列名1, 列名2,...)
# 2.全文索引(注意僅适用于MyISAM存儲引擎)
FULLTEXT INDEX 索引名(列名)
# 3.空間索引(注意僅适用于MyISAM存儲引擎)
SPATIAL key 索引名(列名)
此處就不舉例子說明了,大家可以自己嘗試一下建立索引的指令。