mysql中可使用“CREATE INDEX”語句來添加索引;使用“SHOW INDEX”語句來查看索引;使用“DROP INDEX”語句來對(duì)索引進(jìn)行刪除;而修改索引可以通過刪除原索引,再根據(jù)需要?jiǎng)?chuàng)建一個(gè)同名的索引,從而實(shí)現(xiàn)修改索引的操作。
(推薦教程:mysql視頻教程)
mysql索引的創(chuàng)建
創(chuàng)建索引是指在某個(gè)表的一列或多列上建立一個(gè)索引,可以提高對(duì)表的訪問速度。創(chuàng)建索引對(duì) MySQL 數(shù)據(jù)庫的高效運(yùn)行來說是很重要的。
基本語法
MySQL 提供了三種創(chuàng)建索引的方法:
1) 使用 CREATE INDEX 語句
可以使用專門用于創(chuàng)建索引的 CREATE INDEX 語句在一個(gè)已有的表上創(chuàng)建索引,但該語句不能創(chuàng)建主鍵。
語法格式:
CREATE??ON??(?[]?[?ASC?|?DESC])
語法說明如下:
-
:指定索引名。一個(gè)表可以創(chuàng)建多個(gè)索引,但每個(gè)索引在該表中的名稱是唯一的。
-
:指定要?jiǎng)?chuàng)建索引的表名。
-
:指定要?jiǎng)?chuàng)建索引的列名。通常可以考慮將查詢語句中在 JOIN 子句和 WHERE 子句里經(jīng)常出現(xiàn)的列作為索引列。
-
:可選項(xiàng)。指定使用列前的 length 個(gè)字符來創(chuàng)建索引。使用列的一部分創(chuàng)建索引有利于減小索引文件的大小,節(jié)省索引列所占的空間。在某些情況下,只能對(duì)列的前綴進(jìn)行索引。索引列的長度有一個(gè)最大上限 255 個(gè)字節(jié)(MyISAM 和 InnoDB 表的最大上限為 1000 個(gè)字節(jié)),如果索引列的長度超過了這個(gè)上限,就只能用列的前綴進(jìn)行索引。另外,BLOB 或 TEXT 類型的列也必須使用前綴索引。
-
ASC|DESC:可選項(xiàng)。ASC指定索引按照升序來排列,DESC指定索引按照降序來排列,默認(rèn)為ASC。
2) 使用 CREATE TABLE 語句
索引也可以在創(chuàng)建表(CREATE TABLE)的同時(shí)創(chuàng)建。在 CREATE TABLE 語句中添加以下語句。語法格式:
CONSTRAINT?PRIMARY?KEY?[索引類型]?(,…)
在 CREATE TABLE 語句中添加此語句,表示在創(chuàng)建新表的同時(shí)創(chuàng)建該表的主鍵。
語法格式:
KEY?|?INDEX?[]?[]?(,…)
在 CREATE TABLE 語句中添加此語句,表示在創(chuàng)建新表的同時(shí)創(chuàng)建該表的索引。
語法格式:
UNIQUE?[?INDEX?|?KEY]?[]?[]?(,…)
在 CREATE TABLE 語句中添加此語句,表示在創(chuàng)建新表的同時(shí)創(chuàng)建該表的唯一性索引。
語法格式:
FOREIGN?KEY??
在 CREATE TABLE 語句中添加此語句,表示在創(chuàng)建新表的同時(shí)創(chuàng)建該表的外鍵。
在使用 CREATE TABLE 語句定義列選項(xiàng)的時(shí)候,可以通過直接在某個(gè)列定義后面添加 PRIMARY KEY 的方式創(chuàng)建主鍵。而當(dāng)主鍵是由多個(gè)列組成的多列索引時(shí),則不能使用這種方法,只能用在語句的最后加上一個(gè) PRIMARY KRY(,…) 子句的方式來實(shí)現(xiàn)。
3) 使用 ALTER TABLE 語句
CREATE INDEX 語句可以在一個(gè)已有的表上創(chuàng)建索引,ALTER TABLE 語句也可以在一個(gè)已有的表上創(chuàng)建索引。在使用 ALTER TABLE 語句修改表的同時(shí),可以向已有的表添加索引。具體的做法是在 ALTER TABLE 語句中添加以下語法成分的某一項(xiàng)或幾項(xiàng)。
語法格式:
ADD?INDEX?[]?[]?(,…)
在 ALTER TABLE 語句中添加此語法成分,表示在修改表的同時(shí)為該表添加索引。
語法格式:
ADD?PRIMARY?KEY?[]?(,…)
在 ALTER TABLE 語句中添加此語法成分,表示在修改表的同時(shí)為該表添加主鍵。
語法格式:
ADD?UNIQUE?[?INDEX?|?KEY]?[]?[]?(,…)
在 ALTER TABLE 語句中添加此語法成分,表示在修改表的同時(shí)為該表添加唯一性索引。
語法格式:
ADD?FOREIGN?KEY?[]?(,…)
在 ALTER TABLE 語句中添加此語法成分,表示在修改表的同時(shí)為該表添加外鍵。
mysql索引的查看
索引創(chuàng)建完成后,可以利用 SQL 語句查看已經(jīng)存在的索引。在 MySQL 中,可以使用 SHOW INDEX 語句查看表中創(chuàng)建的索引。
查看索引的語法格式如下:
SHOW?INDEX?FROM??[?FROM?]
語法說明如下:
-
:指定需要查看索引的數(shù)據(jù)表名。
-
:指定需要查看索引的數(shù)據(jù)表所在的數(shù)據(jù)庫,可省略。比如,SHOW INDEX FROM student FROM test; 語句表示查看 test 數(shù)據(jù)庫中 student 數(shù)據(jù)表的索引。
示例
SQL 語句和運(yùn)行結(jié)果如下所示。
mysql>?SHOW?INDEX?FROM?tb_stu_info2G ***************************?1.?row?*************************** ????????Table:?tb_stu_info2 ???Non_unique:?0 ?????Key_name:?height ?Seq_in_index:?1 ??Column_name:?height ????Collation:?A ??Cardinality:?0 ?????Sub_part:?NULL ???????Packed:?NULL ?????????Null:?YES ???Index_type:?BTREE ??????Comment: Index_comment: 1?row?in?set?(0.03?sec)
mysql索引的修改和刪除
刪除索引是指將表中已經(jīng)存在的索引刪除掉。不用的索引建議進(jìn)行刪除,因?yàn)樗鼈儠?huì)降低表的更新速度,影響數(shù)據(jù)庫的性能。對(duì)于這樣的索引,應(yīng)該將其刪除。
在 MySQL 中修改索引可以通過刪除原索引,再根據(jù)需要?jiǎng)?chuàng)建一個(gè)同名的索引,從而實(shí)現(xiàn)修改索引的操作。
基本語法
當(dāng)不再需要索引時(shí),可以使用 DROP INDEX 語句或 ALTER TABLE 語句來對(duì)索引進(jìn)行刪除。
1) 使用 DROP INDEX 語句
語法格式:
DROP?INDEX??ON?
語法說明如下:
-
:要?jiǎng)h除的索引名。
-
:指定該索引所在的表名。
2) 使用 ALTER TABLE 語句
根據(jù) ALTER TABLE 語句的語法可知,該語句也可以用于刪除索引。具體使用方法是將 ALTER TABLE 語句的語法中部分指定為以下子句中的某一項(xiàng)。
-
DROP PRIMARY KEY:表示刪除表中的主鍵。一個(gè)表只有一個(gè)主鍵,主鍵也是一個(gè)索引。
-
DROP INDEX index_name:表示刪除名稱為 index_name 的索引。
-
DROP FOREIGN KEY fk_symbol:表示刪除外鍵。
注意:如果刪除的列是索引的組成部分,那么在刪除該列時(shí),也會(huì)將該列從索引中刪除;如果組成索引的所有列都被刪除,那么整個(gè)索引將被刪除。
刪除索引
【實(shí)例 1】刪除表 tb_stu_info 中的索引,輸入的 SQL 語句和執(zhí)行結(jié)果如下所示。
mysql>?DROP?INDEX?height ????->?ON?tb_stu_info; Query?OK,?0?rows?affected?(0.27?sec) Records:?0??Duplicates:?0??Warnings:?0 mysql>?SHOW?CREATE?TABLE?tb_stu_infoG ***************************?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 )?ENGINE=InnoDB?DEFAULT?CHARSET=gb2312 1?row?in?set?(0.00?sec)
【實(shí)例 2】刪除表 tb_stu_info2 中名稱為 id 的索引,輸入的 SQL 語句和執(zhí)行結(jié)果如下所示。
mysql>?ALTER?TABLE?tb_stu_info2 ????->?DROP?INDEX?height; Query?OK,?0?rows?affected?(0.13?sec) Records:?0??Duplicates:?0??Warnings:?0 mysql>?SHOW?CREATE?TABLE?tb_stu_info2G ***************************?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 )?ENGINE=InnoDB?DEFAULT?CHARSET=gb2312 1?row?in?set?(0.00?sec)