MySQL 索引

免費MySQL課程:阿里雲大學——開發者課堂mysql

MySQL索引的創建對於MySQL的高效運行是很重要的,索引能夠大大提升MySQL的檢索速度。sql

打個比方,若是合理的設計且使用索引的MySQL是一輛蘭博基尼的話,那麼沒有設計和使用索引的MySQL就是一我的力三輪車。less

索引分單列索引和組合索引。單列索引,即一個索引只包含單個列,一個表能夠有多個單列索引,但這不是組合索引。組合索引,即一個索包含多個列。阿里雲

建立索引時,你須要確保該索引是應用在 SQL 查詢語句的條件(通常做爲 WHERE 子句的條件)。spa

實際上,索引也是一張表,該表保存了主鍵與索引字段,並指向實體表的記錄。設計

上面都在說使用索引的好處,但過多的使用索引將會形成濫用。所以索引也會有它的缺點:雖然索引大大提升了查詢速度,同時卻會下降更新表的速度,如對錶進行INSERT、UPDATE和DELETE。由於更新表時,MySQL不只要保存數據,還要保存一下索引文件。code

創建索引會佔用磁盤空間的索引文件。blog

 

普通索引索引

建立索引開發

這是最基本的索引,它沒有任何限制。它有如下幾種建立方式:

CREATE INDEX indexName ON mytable(username(length));

若是是CHAR,VARCHAR類型,length能夠小於字段實際長度;若是是BLOB和TEXT類型,必須指定 length。

 

修改表結構(添加索引)

ALTER mytable ADD INDEX [indexName] ON (username(length))

建立表的時候直接指定

CREATE TABLE mytable

(ID INT NOT NULL,username VARCHAR(16) NOT NULL, INDEX [indexName] (username(length)));

刪除索引的語法

DROP INDEX [indexName] ON mytable;

 

惟一索引

它與前面的普通索引相似,不一樣的就是:索引列的值必須惟一,但容許有空值。若是是組合索引,則列值的組合必須惟一。它有如下幾種建立方式:

 

建立索引

CREATE UNIQUE INDEX indexName ON mytable(username(length))

修改表結構

ALTER table mytable ADD UNIQUE [indexName] (username(length))

建立表的時候直接指定

CREATE TABLE mytable

(ID INT NOT NULL,username VARCHAR(16) NOT NULL, UNIQUE [indexName] (username(length)));

 

使用ALTER 命令添加和刪除索引

有四種方式來添加數據表的索引:

ALTER TABLE tbl_name ADD PRIMARY KEY (column_list): 該語句添加一個主鍵,這意味着索引值必須是惟一的,且不能爲NULL。

 

ALTER TABLE tbl_name ADD UNIQUE index_name (column_list): 這條語句建立索引的值必須是惟一的(除了NULL外,NULL可能會出現屢次)。

 

ALTER TABLE tbl_name ADD INDEX index_name (column_list): 添加普通索引,索引值可出現屢次。

 

ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list):該語句指定了索引爲 FULLTEXT ,用於全文索引。

 

如下實例爲在表中添加索引。

mysql> ALTER TABLE testalter_tbl ADD INDEX (c);

你還能夠在 ALTER 命令中使用 DROP 子句來刪除索引。嘗試如下實例刪除索引:

mysql> ALTER TABLE testalter_tbl DROP INDEX c;

 

使用 ALTER 命令添加和刪除主鍵

主鍵只能做用於一個列上,添加主鍵索引時,你須要確保該主鍵默認不爲空(NOT NULL)。實例以下:

mysql> ALTER TABLE testalter_tbl MODIFY i INT NOT NULL;

mysql> ALTER TABLE testalter_tbl ADD PRIMARY KEY (i);

你也可使用 ALTER 命令刪除主鍵:

mysql> ALTER TABLE testalter_tbl DROP PRIMARY KEY;

刪除指定時只需指定PRIMARY KEY,但在刪除索引時,你必須知道索引名。

 

顯示索引信息

你可使用 SHOW INDEX 命令來列出表中的相關的索引信息。能夠經過添加 \G 來格式化輸出信息。

嘗試如下實例:

mysql> SHOW INDEX FROM table_name; \G........

 

免費MySQL課程:阿里雲大學——開發者課堂

相關文章
相關標籤/搜索