目录
各位看到此博客的小伙伴,如有不对的地方请及时通过私信我或者评论此博客的方式指出,以免误人子弟。多谢!
索引定义和作用
索引就是保存在磁盘中的,高效查询的一种数据结构。InnoDB默认使用的是B+Tree结构,至于什么是B+Tree,为什么选择B+Tree,感兴趣的可以看mysql索引机制、二分查找法、二叉树、平衡二叉树、B-Tree、B+Tree
mysql索引分类
普通索引、唯一索引(主键索引也是唯一索引的一种)、全文索引FULLTEXT、联合索引(也叫多列索引)等。
创建索引
建表时创建
create table 表名(
字段名1 数据类型 [完整性约束条件…],
字段名2 数据类型 [完整性约束条件…],
[UNIQUE | FULLTEXT | SPATIAL ] INDEX | KEY
[索引名] (字段名[(长度)] [ASC |DESC])
);
CREATE TABLE t_index(
id INT(11) NOT NULL AUTO_INCREMENT,
NAME VARCHAR(32) DEFAULT '',
age INT,
UNIQUE INDEX idx_t_index_name(NAME),
PRIMARY KEY(id)
);
需要注意的是创建主键索引的时候只能使用key,而不能这样 primary index(id)。
在已存在的表上创建索引
CREATE [UNIQUE | FULLTEXT | SPATIAL ] INDEX 索引名 ON 表名 (字段名[(长度)] [ASC |DESC]) ;
ALTER TABLE 表名 ADD [UNIQUE | FULLTEXT | SPATIAL ] INDEX 索引名 (字段名[(长度)] [ASC |DESC]) ;
CREATE INDEX idx_t_index_age ON t_index(age);
ALTER TABLE t_index ADD INDEX idx_t_index_name(NAME);
删除索引
DROP INDEX 索引名 ON 表名字;
或
ALTER TABLE 表名 DROP INDEX 索引名 ;
DROP INDEX idx_t_index_name ON t_index;
alter table t_index drop index idx_t_index_name ;
删除主键
如果主键是自增的,不能直接删除,会报如下错误,想要删除,需要先将主键的自增特性去掉,再删除。
alter table t_test modify id int;
alter table t_test drop primary key;
查看索引
show index from 表名字;
SHOW INDEX FROM t_index;
修改索引
mysql中没有真正意义上的修改索引,只有先删除之后在创建新的索引才可以达到修改的目的。
联合索引操作
联合索引的创建、修改等操作跟单列索引一样,只是由一列变为多列而已,如:
ALTER TABLE t_index ADD INDEX index_name(id,NAME);