索引的详解
索引的创建
主键索引的创建
主键索引的创建有两种方式,
1 在创建表的时候, 直接在指定列或者某几列为主键
create table aaa(id int primary key , name varchar(32))
2添加表后, 对指定列创建索引
ALTER TABLE 表名 ADD PRIMARY KEY(列名1,列名2.....)
主键索引的特点:
1) 一个表最多只能有一个主键
2) 一个主键可以指向多列(复合主键)
3) 主键效率是最高, 我们给Id
4) 主键索引的列不能重复, 也不能为null
唯一索引的创建:
1.创建表的时候,添加唯一索引
create table aaa (id int primary key, name varchar(32), email varchar(64) unique)
2.创建表后,添加
create unique index uni_email on aaa(email); uni_email代表索引名称 aaa代表表名 email 为列名
alter table aaa add unique(email);
唯一索引的特点:
1.一张表中可以有多个唯一索引
2.唯一索引数据不能重复,除了null 注意:不能是' ',因为一个是分配空间的
3.什么时候使用唯一索引, 当某列数据不会重复, 才能使用
4.唯一索引的效率也很高, 可以考虑优先使用
普通索引的创建:(太简单了略过)
多列索引:
ALTER TABLE people ADD INDEX lname_fname_age (lame,fname,age);
为了提高搜索效率,我们需要考虑运用多列索引,由于索引文件以B-Tree格式保存,所以我们不用扫描任何记录,即可得到最终结果。
注:在mysql中执行查询时,只能使用一个索引,如果我们在lname,fname,age上分别建索引,执行查询时,只能使用一个索引,mysql会选择一个最严格(获得结果集记录数最少)的索引。
3.最左前缀:顾名思义,就是最左优先,上例中我们创建了lname_fname_age多列索引,相当于创建了(lname)单列索引,(lname,fname)组合索引以及(lname,fname,age)组合索引。
注:在创建多列索引时,要根据业务需求,where子句中使用最频繁的一列放在最左边。
索引的查询
1 desc 表名
2 show keys from 表名 \G
3 show indexs from 表名 \G
索引的修改
索引的删除