Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment ------ ---------- ------------ ------------ ----------- --------- ----------- -------- ------ ------ ---------- ------- ------------- t3 1 MultiIdx 1 id A (NULL) (NULL) (NULL) BTREE t3 1 MultiIdx 2 NAME A (NULL) (NULL) (NULL) BTREE t3 1 MultiIdx 3 age A (NULL) (NULL) (NULL) BTREE t3 1 t3AgeAndInfo 1 age A (NULL) (NULL) (NULL) BTREE t3 1 t3AgeAndInfo 2 info A (NULL) (NULL) (NULL) YES BTREE可以看到表中的字段的顺序,第一个位置是age,第二个位置是info,info字段是可空字段
?


创建表t6,在t6表上创建全文索引
?
CREATE TABLE t6 ( id INT NOT NULL, info CHAR(255) )ENGINE= MYISAM;
?
注意修改ENGINE参数为MYISAM,MYSQL默认引擎InnoDB不支持全文索引
使用ALTER TABLE语句在info字段上创建全文索引
ALTER TABLE t6 ADD FULLTEXT INDEX infoFTIdx(info)使用SHOW INDEX查看索引情况
?
SHOW INDEX FROM t6
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment ------ ---------- --------- ------------ ----------- --------- ----------- -------- ------ ------ ---------- ------- ------------- t6 1 infoFTIdx 1 info (NULL) (NULL) (NULL) (NULL) YES FULLTEXT创建表t7,并在空间数据类型字段g上创建名称为spatIdx的空间索引
?
?
CREATE TABLE t7(g GEOMETRY NOT NULL)ENGINE=MYISAM;使用ALTER TABLE在表t7的g字段建立空间索引
?
?
ALTER TABLE t7 ADD SPATIAL INDEX spatIdx(g)使用SHOW INDEX查看索引情况
?
?
SHOW INDEX FROM t7
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment ------ ---------- -------- ------------ ----------- --------- ----------- -------- ------ ------ ---------- ------- ------------- t7 1 spatIdx 1 g A (NULL) 32 (NULL) SPATIAL2、使用CREATE INDEX语句创建索引,语法如下
?
?
CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name ON table_name(col_name[length],...) [ASC|DESC]可以看到CREATE INDEX语句和ALTER INDEX语句的基本语法一样,只是关键字不同。
?
我们建立一个book表
CREATE TABLE book ( bookid INT NOT NULL, bookname VARCHAR (255) NOT NULL, AUTHORS VARCHAR (255) NOT NULL, info VARCHAR (255) NULL, COMMENT VARCHAR (255) NULL, year_publication YEAR NOT NULL )建立普通索引
CREATE INDEX BkNameIdx ON book(bookname)建立唯一索引
?
?
CREATE UNIQUE INDEX UniqidIdx ON book(bookId)建立复合索引
?
?
CREATE INDEX BkAuAndInfoIdx ON book(AUTHORS(20),info(50))建立全文索引,我们drop掉t6表,重新建立t6表
?
?
DROP TABLE IF EXISTS t6 CREATE TABLE t6 ( id INT NOT NULL, info CHAR(255) )ENGINE= MYISAM; CREATE FULLTEXT INDEX infoFTIdx ON t6(info);建立空间索引,我们drop掉t7表,重新建立t7表
?
?
DROP TABLE IF EXISTS t7 CREATE TABLE t7(g GEOMETRY NOT NULL)ENGINE=MYISAM; CREATE SPATIAL INDEX spatIdx ON t7(g)
?
?
?
删除索引
MYSQL中使用ALTER TABLE或者DROP INDEX语句来删除索引,两者实现相同功能
1、使用ALTER TABLE删除索引
语法
ALTER TABLE table_name DROP INDEX index_name
ALTER TABLE book DROP INDEX UniqidIdx
SHOW CREATE TABLE book
Table Create Table
------ ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
book CREATE TABLE `book` (
`bookid` int(11) NOT NULL,
`bookname` varchar(255) NOT NULL,
`authors