SQL--索引

来源:互联网 发布:mysql左外连接查询 编辑:程序博客网 时间:2024/06/08 19:04

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 useralter table t1 drop index index_t1_ming