索引mysql
MySQL索引的創建對於Mysql的搞笑運行時很重要的,索引能夠大大提升MySQL的檢索速度。sql
打個比方,若是合理的設計且使用索引的MySQL是一輛蘭博基尼的話,那麼沒有設計和使用索引的MySQL就是一我的力三輪車。spa
索引分單列索引和組合索引。單列索引,即一個索引只包含單個列,一個表能夠有多個單列索引,但這不是組合索引。組合索引,即一個索包含多個列。設計
建立索引時,你須要確保該索引是應用在 SQL 查詢語句的條件(通常做爲 WHERE 子句的條件)。 code
實際上,索引也是一張表,該表保存了主鍵與索引字段,並指向實體表的記錄。blog
上面都在說使用索引的好處,但過多的使用索引將會形成濫用。所以索引也會有它的缺點:雖然索引大大提升了查詢速度,同時卻會下降更新表的速度,如對錶進行INSERT、UPDATE和DELETE。由於更新表時,MySQL不只要保存數據,還要保存一下索引文件。創建索引會佔用磁盤空間的索引文件。索引
建立索引table
這是最基本的索引,它沒有任何限制。它有如下幾種建立方式:class
1 CREATE INDEX indexName ON mytable(username(length))
若是是CHAR,VARCHAR類型,length能夠小於字段實際長度;若是是BLOB和TEXT類型,必須指定 length。test
修改表結構
1 ALTER mytable ADD INDEX [indexName] ON (username(length))
建立表的時候直接指定
1 CREATE TABLE mytable( 2 3 ID INT NOT NULL, 4 5 username VARCHAR(16) NOT NULL, 6 7 INDEX [indexName] (username(length)) 8 9 );
刪除索引的語法
1 DROP INDEX [indexName] ON mytable;
它與前面的普通索引相似,不一樣的就是:索引列的值必須惟一,但容許有空值。若是是組合索引,則列值的組合必須惟一。它有如下幾種建立方式:
建立索引
1 建立索引 2 CREATEUNIQUEINDEXindexName ONmytable(username(length)) 3 4 5 修改表結構 6 ALTERmytable ADDUNIQUE[indexName] ON(username(length)) 7 8 9 建立表的時候直接指定 10 CREATETABLEmytable( 11 12 ID INTNOTNULL, 13 14 username VARCHAR(16) NOTNULL, 15 16 UNIQUE[indexName] (username(length)) 17 18 );
1 有四種方式來添加數據表的索引: 2 ALTERTABLEtbl_name ADDPRIMARYKEY(column_list): 該語句添加一個主鍵,這意味着索引值必須是惟一的,且不能爲NULL。 3 ALTERTABLEtbl_name ADDUNIQUEindex_name (column_list): 這條語句建立索引的值必須是惟一的(除了NULL外,NULL可能會出現屢次)。 4 ALTERTABLEtbl_name ADDINDEXindex_name (column_list): 添加普通索引,索引值可出現屢次。 5 ALTERTABLEtbl_name ADDFULLTEXT index_name (column_list):該語句指定了索引爲 FULLTEXT ,用於全文索引。 6 7 8 如下實例爲在表中添加索引。 9 mysql> ALTERTABLEtestalter_tbl ADDINDEX(c); 10 你還能夠在 ALTER命令中使用 DROP子句來刪除索引。嘗試如下實例刪除索引: 11 mysql> ALTERTABLEtestalter_tbl DROPINDEX(c);
1 主鍵只能做用於一個列上,添加主鍵索引時,你須要確保該主鍵默認不爲空(NOTNULL)。實例以下: 2 mysql> ALTERTABLEtestalter_tbl MODIFYi INTNOTNULL; 3 mysql> ALTERTABLEtestalter_tbl ADDPRIMARYKEY(i); 4 5 你也可使用 ALTER命令刪除主鍵: 6 mysql> ALTERTABLEtestalter_tbl DROPPRIMARYKEY; 7 刪除指定時只需指定PRIMARYKEY,但在刪除索引時,你必須知道索引名。
mysql> SHOW INDEX FROM table_name\G