1.創建普通索引
創建一個普通索引時,不需要加任何UNIQUE、FULLTEXT或者SPATIAL參數。
下面創建一個表名為index1的表,在表中的id字段上建立索引。SQL代碼如下:
CREATE TABLE index1 (id INT , name VARCHAR(20) , sex BOOLEAN , INDEX ( id) );
運行結果顯示創建成功,使用SHOW CREATE TABLE語句查看表的結構。顯示如下:
mysql> SHOW CREATE TABLE index1 \G *************************** 1. row *************************** Table: index1 Create Table: CREATE TABLE `index1` ( `id` int(11) DEFAULT NULL, `name` varchar(20) DEFAULT NULL, `sex` tinyint(1) DEFAULT NULL, KEY `index1_id` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 1 row in set (0.00 sec)
2.創建唯一性索引
創建唯一性索引時,需要使用UNIQUE參數進行約束。
下面創建一個表名為index2的表,在表中的id字段上建立名為index2_id的唯一性索引,且以升序的形式排列。SQL代碼如下:
CREATE TABLE index2 (id INT UNIQUE , name VARCHAR(20) , UNIQUE INDEX index2_id ( id ASC) );
運行結果顯示創建成功,使用SHOW CREATE TABLE語句查看表的結構。顯示如下:
mysql> SHOW CREATE TABLE index2 \G *************************** 1. row *************************** Table: index2 Create Table: CREATE TABLE `index2` ( `id` int(11) DEFAULT NULL, `name` varchar(20) DEFAULT NULL, UNIQUE KEY `id` (`id`), UNIQUE KEY `index2_id` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 1 row in set (0.00 sec)
結果可以看到,id字段上已經建立了一個名為index2_id的唯一性索引。這里的id字段可以沒有進行唯一性約束,也可以在該字段上成功創建唯一性索引。但是,這樣可能達不到提高查詢速度的目的。
3.創建全文索引
全文索引只能創建在CHAR、VARCHAR或TEXT類型的字段上。而且,現在只有MyISAM存儲引擎支持全文索引。
下面創建一個表名為index3的表,在表中的info字段上建立名為index3_ info的全文索引。SQL代碼如下:
CREATE TABLE index3 (id INT , info VARCHAR(20) , FULLTEXT INDEX index3_info ( info ) )ENGINE=MyISAM;
運行結果顯示創建成功,使用SHOW CREATE TABLE語句查看表的結構。顯示如下:
mysql> SHOW CREATE TABLE index3 \G *************************** 1. row *************************** Table: index3 Create Table: CREATE TABLE `index3` ( `id` int(11) DEFAULT NULL, `info` varchar(20) DEFAULT NULL, FULLTEXT KEY `index3_info` (`info`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 1 row in set (0.00 sec)
結果可以看到,info字段上已經建立了一個名為index3_info的全文索引。如果表的存儲引擎不是MyISAM存儲引擎,系統會提示"ERROR 1214 (HY000): The used table type doesn't support FULLTEXT indexes"。
注意:目前只有MyISAM存儲引擎支持全文索引,InnoDB存儲引擎還不支持全文索引。因此,在創建全文索引時一定注意表的存儲引擎的類型。對於經常需要索引的字符串、文字數據等信息,可以考慮存儲到MyISAM存儲引擎的表中。
4.創建單列索引
單列索引是在表的單個字段上創建索引。
下面創建一個表名為index4的表,在表中的subject字段上建立名為index4_st的單列索引。SQL代碼如下:
CREATE TABLE index4 (id INT , subject VARCHAR(30) , INDEX index4_st ( subject(10) ) );
運行結果顯示創建成功,使用SHOW CREATE TABLE語句查看表的結構。顯示如下:
mysql> SHOW CREATE TABLE index4 \G *************************** 1. row *************************** Table: index4 Create Table: CREATE TABLE `index4` ( `id` int(11) DEFAULT NULL, `subject` varchar(30) DEFAULT NULL, KEY `index4_st` (`subject`(10)) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 1 row in set (0.00 sec)
結果可以看到,subject字段上已經建立了一個名為index4_st的單列索引。細心的讀者可能會發現,subject字段長度為20,而index4_st索引的長度只有10。這樣做的目的還是為了提高查詢速度。對於字符型的數據,可以不用查詢全部信息,而只查詢其前面的若干字符信息。
5.創建多列索引
創建多列索引是在表的多個字段上創建一個索引。
下面創建一個表名為index5的表,在表中的name和sex字段上建立名為index5_ns的多列索引。SQL代碼如下:
CREATE TABLE index5 (id INT , name VARCHAR(20) , sex CHAR(4) , INDEX index5_ns ( name, sex ) );
運行結果顯示創建成功,使用SHOW CREATE TABLE語句查看表的結構。顯示如下:
mysql> SHOW CREATE TABLE index5 \G *************************** 1. row *************************** Table: index5 Create Table: CREATE TABLE `index5` ( `id` int(11) DEFAULT NULL, `name` varchar(20) DEFAULT NULL, `sex` char(4) DEFAULT NULL, KEY `index5_ns` (`name`,`sex`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 1 row in set (0.00 sec)