1. 程式人生 > 其它 >MySQL建立索引(CREATE INDEX)

MySQL建立索引(CREATE INDEX)

建立索引是指在某個表的一列或多列上建立一個索引,可以提高對錶的訪問速度。建立索引對MySQL資料庫的高效執行來說是很重要的。

基本語法

MySQL 提供了三種建立索引的方法:

1) 使用 CREATE INDEX 語句

可以使用專門用於建立索引的 CREATE INDEX 語句在一個已有的表上建立索引,但該語句不能建立主鍵

語法格式:

CREATE <索引名> ON <表名> (<列名> [<長度>] [ ASC | DESC])

語法說明如下:

  • <索引名>:指定索引名。一個表可以建立多個索引,但每個索引在該表中的名稱是唯一的
  • <表名>:指定要建立索引的表名。
  • <列名>:指定要建立索引的列名。通常可以考慮將查詢語句中在 JOIN 子句和 WHERE 子句裡經常出現的列作為索引列。
  • <長度>:可選項。指定使用列前的 length 個字元來建立索引。使用列的一部分建立索引有利於減小索引檔案的大小,節省索引列所佔的空間。在某些情況下,只能對列的字首進行索引。索引列的長度有一個最大上限 255 個位元組(MyISAM 和 InnoDB 表的最大上限為 1000 個位元組),如果索引列的長度超過了這個上限,就只能用列的字首進行索引。另外,BLOB 或 TEXT 型別的列也必須使用字首索引
  • ASC|DESC
    :可選項。ASC指定索引按照升序來排列,DESC指定索引按照降序來排列,預設為ASC

2) 使用 CREATE TABLE 語句

索引也可以在建立表(CREATE TABLE)的同時建立。在 CREATE TABLE 語句中新增以下語句。語法格式:

CONSTRAINT PRIMARY KEY [索引型別] (<列名>,…)

在 CREATE TABLE 語句中新增此語句,表示在建立新表的同時建立該表的主鍵。

語法格式:

KEY | INDEX [<索引名>] [<索引型別>] (<列名>,…)

在 CREATE TABLE 語句中新增此語句,表示在建立新表的同時建立該表的索引。

語法格式:

UNIQUE [ INDEX | KEY] [<索引名>] [<索引型別>] (<列名>,…)

在 CREATE TABLE 語句中新增此語句,表示在建立新表的同時建立該表的唯一性索引。

語法格式:

FOREIGN KEY <索引名> <列名>

在 CREATE TABLE 語句中新增此語句,表示在建立新表的同時建立該表的外來鍵。

在使用 CREATE TABLE 語句定義列選項的時候,可以通過直接在某個列定義後面新增 PRIMARY KEY 的方式建立主鍵。而當主鍵是由多個列組成的多列索引時,則不能使用這種方法,只能用在語句的最後加上一個 PRIMARY KRY(<列名>,…) 子句的方式來實現

3) 使用 ALTER TABLE 語句

CREATE INDEX 語句可以在一個已有的表上建立索引,ALTER TABLE 語句也可以在一個已有的表上建立索引。在使用 ALTER TABLE 語句修改表的同時,可以向已有的表新增索引。具體的做法是在 ALTER TABLE 語句中新增以下語法成分的某一項或幾項。

語法格式:

ADD INDEX [<索引名>] [<索引型別>] (<列名>,…)

在 ALTER TABLE 語句中新增此語法成分,表示在修改表的同時為該表新增索引。

語法格式:

ADD PRIMARY KEY [<索引型別>] (<列名>,…)

在 ALTER TABLE 語句中新增此語法成分,表示在修改表的同時為該表新增主鍵。

語法格式:

ADD UNIQUE [ INDEX | KEY] [<索引名>] [<索引型別>] (<列名>,…)

在 ALTER TABLE 語句中新增此語法成分,表示在修改表的同時為該表新增唯一性索引。

語法格式:

ADD FOREIGN KEY [<索引名>] (<列名>,…)

在 ALTER TABLE 語句中新增此語法成分,表示在修改表的同時為該表新增外來鍵。

建立普通索引

建立普通索引時,通常使用 INDEX 關鍵字。

例 1

建立一個表 tb_stu_info,在該表的 height 欄位建立普通索引。輸入的 SQL 語句和執行過程如下所示。

mysql> CREATE TABLE tb_stu_info
    -> (
    -> id INT NOT NULL,
    -> name CHAR(45) DEFAULT NULL,
    -> dept_id INT DEFAULT NULL,
    -> age INT DEFAULT NULL,
    -> height INT DEFAULT NULL,
    -> INDEX(height)
    -> );
Query OK,0 rows affected (0.40 sec)
mysql> SHOW CREATE TABLE tb_stu_info\G
*************************** 1. row ***************************
       Table: tb_stu_info
Create Table: CREATE TABLE `tb_stu_info` (
  `id` int(11) NOT NULL,
  `name` char(45) DEFAULT NULL,
  `dept_id` int(11) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  `height` int(11) DEFAULT NULL,
  KEY `height` (`height`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312
1 row in set (0.01 sec)

建立唯一索引

建立唯一索引,通常使用 UNIQUE 引數。

例 2

建立一個表 tb_stu_info2,在該表的 id 欄位上使用 UNIQUE 關鍵字建立唯一索引。輸入的 SQL 語句和執行過程如下所示。

mysql> CREATE TABLE tb_stu_info2
    -> (
    -> id INT NOT NULL,
    -> name CHAR(45) DEFAULT NULL,
    -> dept_id INT DEFAULT NULL,
    -> age INT DEFAULT NULL,
    -> height INT DEFAULT NULL,
    -> UNIQUE INDEX(height)
    -> );
Query OK,0 rows affected (0.40 sec)
mysql> SHOW CREATE TABLE tb_stu_info2\G
*************************** 1. row ***************************
       Table: tb_stu_info2
Create Table: CREATE TABLE `tb_stu_info2` (
  `id` int(11) NOT NULL,
  `name` char(45) DEFAULT NULL,
  `dept_id` int(11) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  `height` int(11) DEFAULT NULL,
  UNIQUE KEY `height` (`height`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312
1 row in set (0.00 sec)