索引對於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和All
possible_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 索引名(列名)
此處就不舉例子說明了,大家可以自己嘗試一下建立索引的命令。