SHOW INDEX FROM t3
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) SPATIAL
2、使用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