mysql創建索引


 

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)
復制代碼

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM