數(shù)據(jù)庫(kù)索引是一種能夠改善表操作速度的數(shù)據(jù)結(jié)構(gòu)。索引可以通過(guò)一個(gè)或多個(gè)列來(lái)創(chuàng)建,它可以提高隨機(jī)查詢(xún)的速度,并在檢索記錄時(shí)實(shí)現(xiàn)高效排序。
在創(chuàng)建索引時(shí),需要考慮哪些列會(huì)用于 SQL 查詢(xún),然后為這些列創(chuàng)建一個(gè)或多個(gè)索引。
事實(shí)上,索引也是一種表,保存著主鍵或索引字段,以及一個(gè)能將每個(gè)記錄指向?qū)嶋H表的指針。
數(shù)據(jù)庫(kù)用戶(hù)是看不到索引的,它們只是用來(lái)加速查詢(xún)的。數(shù)據(jù)庫(kù)搜索引擎使用索引來(lái)快速定位記錄。
INSERT 與 UPDATE 語(yǔ)句在擁有索引的表中執(zhí)行會(huì)花費(fèi)更多的時(shí)間,而 SELECT 語(yǔ)句卻會(huì)執(zhí)行得更快。這是因?yàn)椋谶M(jìn)行插入或更新時(shí),數(shù)據(jù)庫(kù)也需要插入或更新索引值。
可以為表創(chuàng)建唯一索引。唯一索引要求任意兩行的索引值不能相同。下面展示的就是在表中創(chuàng)建索引的語(yǔ)法格式:
CREATE UNIQUE INDEX index_name
ON table_name ( column1, column2,...);
也可以使用一或多個(gè)列來(lái)創(chuàng)建索引。比如說(shuō),表 tutorials_tbl 中,使用 tutorial_author 來(lái)創(chuàng)建索引。
CREATE UNIQUE INDEX AUTHOR_INDEX
ON tutorials_tbl (tutorial_author)
還可以為表創(chuàng)建簡(jiǎn)單索引,只需要在查詢(xún)時(shí)不帶 UNIQUE 關(guān)鍵字,就可創(chuàng)建簡(jiǎn)單索引。簡(jiǎn)單索引允許在表中復(fù)制值。
如果打算按照降序在列中索引數(shù)值,可以在列名后添加保留字 DESC。
mysql> CREATE UNIQUE INDEX AUTHOR_INDEX
ON tutorials_tbl (tutorial_author DESC)
為表添加索引,可以采用4種語(yǔ)句。
ALTER TABLE tbl_name ADD PRIMARY KEY (column_list) 該語(yǔ)句添加一個(gè)主鍵。意味著索引值必須是唯一的,不能為 NULL。 ALTER TABLE tbl_name ADD UNIQUE index_name (column_list) 該語(yǔ)句為必須唯一的值(除了 NULL 值之外,NULL 值可以多次出現(xiàn))創(chuàng)建索引。 ALTER TABLE tbl_name ADD INDEX index_name (column_list) 語(yǔ)句為可能多次出現(xiàn)的值創(chuàng)建一般索引。 ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list) 語(yǔ)句創(chuàng)建專(zhuān)用于文本搜索的 FULLTEXT 索引。 下面這個(gè)范例將為現(xiàn)有表添加索引。
mysql> ALTER TABLE testalter_tbl ADD INDEX (c);
可以使用 DROP 子句以及 ALTER 命令刪除索引,通過(guò)下面這個(gè)范例來(lái)刪除之前創(chuàng)建的索引。
mysql> ALTER TABLE testalter_tbl DROP INDEX (c);
添加主鍵也采用類(lèi)似方式,但要保證主鍵一定在列上,是 NOT NULL。
下面這個(gè)范例將在現(xiàn)有表中添加主鍵,先使列為 NOT NULL,然后再將其作為主鍵。
mysql> ALTER TABLE testalter_tbl MODIFY i INT NOT NULL;
mysql> ALTER TABLE testalter_tbl ADD PRIMARY KEY (i);
同樣,也可以使用 ALTER 命令刪除一個(gè)主鍵。
mysql> ALTER TABLE testalter_tbl DROP PRIMARY KEY;
如果要?jiǎng)h除非主鍵的索引,則必須指定索引名稱(chēng)。
使用 SHOW INDEX 命令可以列出表的所有索引。以垂直格式輸出(標(biāo)識(shí)為 \G)會(huì)比較便于查看,可避免單行內(nèi)容過(guò)長(zhǎng)。語(yǔ)法格式如下:
mysql> SHOW INDEX FROM table_name\G
........