正文
三种索引的索引方式是一样的,只不过对索引的关键字有不同的限制:
-
普通索引:对关键字没有限制
-
唯一索引:要求记录提供的关键字不能重复
-
主键索引:要求关键字唯一且不为null
索引管理语法
查看索引
show create table 表名
:
desc 表名
创建索引
创建表之后建立索引
create TABLE user_index( id int auto_increment primary key,
first_name varchar(16),
last_name VARCHAR(16),
id_card VARCHAR(18),
information text
);
alter table user_index
add key name (first_name,last_name),
add UNIQUE KEY (id_card),
add FULLTEXT KEY (information);
show create table user_index
:
创建表时指定索引
CREATE TABLE user_index2 ( id INT auto_increment PRIMARY KEY,
first_name VARCHAR (16),
last_name VARCHAR (16),
id_card VARCHAR (18),
information text,
KEY name (first_name, last_name),
FULLTEXT KEY (information),
UNIQUE KEY (id_card)
);
删除索引
根据索引名删除普通索引、唯一索引、全文索引:
alter table 表名 drop KEY 索引名
alter table user_index drop KEY name;alter table user_index drop KEY id_card;
alter table user_index drop KEY information;
删除主键索引:
alter table 表名 drop primary key
(因为主键只有一个)。这里值得注意的是,如果主键自增长,那么不能直接执行此操作(自增长依赖于主键索引):
需要取消自增长再行删除:
alter table user_index
MODIFY id int,
drop PRIMARY KEY
但通常不会删除主键,因为设计主键一定与业务逻辑无关。
执行计划explain
CREATE TABLE innodb1 ( id INT auto_increment PRIMARY KEY,
first_name VARCHAR (16),
last_name VARCHAR (16),
id_card VARCHAR (18),
information text,
KEY name (first_name, last_name),
FULLTEXT KEY (information),
UNIQUE KEY (id_card)
);
insert into innodb1 (first_name,last_name,id_card,information) values ('张','三','1001','华山派');
我们可以通过
explain selelct
来分析SQL语句执行前的执行计划: