1.1 索引的用处
索引是数据的位置,方便快速定位到数据的位置,索引是有代价的,提高了查询速度,降低了增持改查的数据,因为每一个的操作都会引起数据的位置的变化。
1.2 索引使用的场景
一般在比较频繁的列上加,而且在重复度低的列上加比较好。比方说在性别列加的话,因为性别只有男和女,完全无意义,加了反而会加剧索引文件的大小,而比方说加到身份证上就比较合理。
1.3 索引种类
key:普通索引,纯粹的是帮助提高查询速度。
unique key:唯一索引,不重复的索引,即能提高查询速度,也能起到约束的作用。
primary key:主键索引,创建了主键将会自动创建索引
full text:全文索引,在中文下是无效的。
例子如下:
创建表的时候创建索引,指定索引的名称为
CREATE TABLE user(
id INTEGER primary key,
name VARCHAR(255),
email VARCHAR(255),
key index_user_id(id)
)
1.4 索引长度
创建索引时,可以只索引前一部分内容,比如前10个字符。比如邮箱大部分都是以.com结尾的,建立邮箱索引后,查询时就只需要匹配一小部分内容了。
如将邮箱的前10个字符建立索引。
key index_user_name(email(10))
1.5 多列索引
把两列或多列的值看成一个整体,然后建索引。
比如一般姓和名,可以将两列组合起来创建联合起来创建索引,会加快查询速度。
create table t1(
xing char(2),
ming char(10),
key index_t1_xm(xing,ming)
)
涉及到联合索引的列时,遵循左前缀的原则。
执行如下SQL,索引将会起作用。可通过explain查看possible_key和key显示的值
explain select * from t1 where xing='朱' AND ming='元璋'
explain select * from t1 where xing='朱' OR ming='元璋'
explain select * from t1 where xing='朱'
而如下 的SQL,SQL将不会起作用
explain select * from t1 where ming='元璋'
1.6 索引冗余
可能在某个列存在多个索引。
比如上面的联合索引index_t1_xm(xing,ming),查询姓名和姓,索引将会起作用,但是查询名的时候索引不会起作用,那就另外创建一个名的索引。key ming(ming),这样,字段名ming将会出现索引冗余。但是冗余索引在开发中有时是必要的。
2 索引操作
查看表的索引:
show index from t1
在user表中的id列创建索引名称为user_index
alter table t1 add [unique/index] index_t1_ming(ming)
create index user_index on user(id)
删除user表中指定名称为user_index 的索引
drop index user_index on user
alter table t1 drop index index_t1_ming