建立索引
CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name
[USING index_type]
ON table_name (index_col_name,...)
其中對應的文法變量資訊如下:
[UNIQUE|FULLTEXT|SPATIAL]
中括号中的這三個關鍵字表示建立的索引類型,它們分别表示唯一索引、全文索引、空間索引三種不同的索引類型。如果我們不指定任何關鍵字,則預設為普通索引。
index_name
index_name表示索引的名稱,由使用者自行定義,以便于以後對該索引進行修改等管理操作。
index_type
index_type表示索引的具體實作方式,在MySQL中,有兩種不同形式的索引——BTREE索引和HASH索引。在存儲引擎為MyISAM和InnoDB的表中隻能使用BTREE,其預設值就是BTREE;在存儲引擎為MEMORY或者HEAP的表中可以使用HASH和BTREE兩種類型的索引,其預設值為HASH。
index_col_name
index_col_name表示需要建立索引的字段名稱,我們還可以針對多個字段建立複合索引,隻需要在多個字段名稱之間以英文逗号隔開即可。
此外,對于CHAR或VARCHAR類型的字段,我們還可以隻使用字段内容前面的一部分來建立索引,隻需要在對應的字段名稱後面加上形如(length)的指令即可,表示隻需要使用字段内容前面的length個字元來建立索引。在這裡,我們以User表的username字段(類型為VARCHAR(50))為例,使用username字段的6個字元字首來建立索引。
CREATE INDEX idx_user_username ON user (username(6));
由于多數字段的前6個字元通常不同,是以此索引不會比使用字段的全部内容建立的索引速度慢很多。另外,使用字段的一部分建立索引可以使索引檔案大大減小,進而節省了大量的磁盤空間,有可能提高INSERT操作的速度。
在MySQL中,字首長度最大值為255位元組。對于存儲引擎為MyISAM或InnoDB的資料表,字首最長為1000位元組。
必須注意的是,在MySQL中,對于TEXT和BLOB這種大資料類型的字段,必須給出字首長度(length)才能成功建立索引。
備注1:上述建立索引的文法還具有以下變體:
ALTER TABLE table_name
ADD [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name (index_col_name,...) [USING index_type]
備注2:在MySQL中,隻有當資料表的存儲引擎為MyISAM, InnoDB或BDB類型時,你才能向具有NULL值的列或者資料類型為TEXT或BLOB的列添加索引。