建立数据库索引是提升运行效率的重要手段,使用索引能大大提升MySQL的检索速度。创建索引时,首先确保该索引是应用SQL查询语句的条件。(一般为where子句的条件)
索引有单列索引和组合索引两种。单列索引也就是一个索引只包含一个列,一个数据表可以包含多个单列索引,但是这个不是组合索引哦!!!!!!
组合索引是一个索引包含了多个列。
索引也是一张表,包含了主键和索引字段,并指向实体表的记录。
前面说了索引的好处,可以加快检索速度,但是,它也有缺点。过多的使用索引会降低更新表的速度,比如,在对表进行insert、update和delete时,速度会降低。因为MySQL不仅需要保存数据,还要更新索引文件。并且,建立索引要占用一定的磁盘空间。
唯一索引
唯一索引与前面提到的索引类似,区别在于,索引列的值必须唯一,但是允许有空值。如果是组合索引,则列值的组合必须唯一。
唯一索引有下列几种创建方式
直接创建索引
create unique index indexname on mytable(username(length))
通过修改表的结构增加索引
alter table column_charset add unique index_name (c2(length));
创建表时直接指定
create table mytable(
-> ID INT NOT NULL,
-> username varchar(16) not null,
-> unique indexname (id)
-> );
普通索引
普通索引是最基本的索引,他没有任何限制。有下面三种方式,创建的时候和上面的唯一索引类似,只是少了unique标识符
直接创建索引
create unique index indexname on mytable(username(length))
如果是char和varchar类型,length字段可以小于字符实际长度;如果是blob和text类型,则必须指定length。
修改表结构来添加索引
alter table column_charset add index_name (c2(length));
创建表时直接指定
create table mytable2(
-> ID int not null,
-> username varchar(16) not null,
-> index index_xxxx (username(16))
-> );
删除索引
drop index index_xxxx on mytable2;
查看一张表的所有索引
show index from mytable;