索引基本概述
1.什么是索引?
官方定义:一种帮助mysql提高查询效率的数据结构
优点:
1:大大加快数据查询速度
缺点:
1.维护索引需要耗费数据库资源
2.索引需要占用磁盘空间
3.当对表的数据进行增删改的时候,要维护索引,速度会受影响
因此:索引不是建得越多越好。应该是对经常查询用到的字段合理地添加索引。
2.索引的分类
a.主键索引:字段设定为主键后默认会建立一个索引,innodb为聚簇索引。不能为空。
b.单值索引:也称普通索引,一个表中可以有多个单指索引。
c.唯一索引:索引列的值必须唯一,可以为空,但只能有一个null。
d.复合索引:多个列的属性共同组成一个索引
e.全文索引(5.7版本之前 只在myisam引擎):全文引擎类型为fulltext。全文索引可以在char,varchar,text类型上创建。
3.索引的操作
主键索引 自动创建:
--建表时 主键自动创建主键索引
create table t_user(id varchar(20) primary key,name varchar(20));
查看索引:
show index from t_user
2.单值索引:
--建表时创建 (随表建立的索引索引名与字段名相同)
create table t_user1(id varchar(20) primary key,name varchar(20),key (name));
--建表后创建:
create index nameindex on t_user1(name);
--删除索引:
drop index 索引名 on 表名;
3.唯一索引
--建表时创建:
create table t_user2(id varchar(20) primary key,name varchar(20),unique(name));
--建表后创建
create unique index nameindex on t_user2(name);
4.复合索引
--建表时创建:
create table t_user3(id varchar(20) primary key,name varchar(20),age int,key(name,age))
建表后创建:
create index nameageindex on t_user3(name,key)
注意!!!!:
复合索引遵守最左前缀原则;mysql引擎在查询时为了更好地使用索引,会动态调整字段顺序。
eg:目前有name age bir复合索引
bir name age能使用该索引
name age能
name bir能
bir age name能
bir age 不能