MySql 索引
什么是索引 index
官方定义:一种能帮mysql提高查询效率的数据结构
- 索引的优点
1. 大大提升数据查询效率
- 索引缺点
1. 维护索引需要耗费数据资源
2. 索引需要占用电脑空间
3. 当对表进行增删改时,因为要维护索引,速度会受到影响
索引分类(面试必问)
InnoDB
- a. 主键索引
设定为主键后数据库会自动创立索引,innodb为聚簇索引 主键索引的索引列的值不能为空
- b. 单值索引(单列索引、普通索引)
即一个索引只包含一个列,一个表可以有多个单列索引
- c. 唯一索引
索引的值必须唯一,但允许有空值 唯一索引列值可以存null 但是只能存在一个null
- d. 复合索引
即一个索引包含多个列
- e. Full Text 全文索引(MYSQL5.7之前 只能用于MYISAM引擎)
索引的基本操作
1. 主键索引 自动创建
- 主键索引是在建表时自动创建的
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)
)
show index from t_user1
- 建表之后创建
CREATE INDEX name_index on t_user(name)
效果图,第一张是建表时创建,第二张是建表之后创建
3. 唯一索引
- 唯一索引的创建
- 建表时创建
CREATE TABLE t_user2(
id VARCHAR(20) PRIMARY KEY,
name VARCHAR(20),
UNIQUE(name)
)
show index from t_user2;
- 建表后创建
create index unique name_index on t_user2(name)
4. 复合索引
- 复合索引的创建
- 建表时创建
create table t_user3(
id varchar(20) primary key,
name varchar(20),
age int,
key(name,age)
)
show index from t_user3
- 建表后创建
create index on t_user3(name,age)
根据索引查找:
name age bir #1.左前缀原则 2.mysql引擎在查询时为了更好的利用索引,在查询过程中会动态的调整查询字段的顺序
索引的底层原理
- 我们执行以下语句
create table t_emp(id int primary key,name varchar(20),age int);
insert into t_emp values(5,'d',22);
insert into t_emp values(6,'d',29);
insert into t_emp values(7,'e',28);
insert into t_emp values(1,'a',27);
insert into t_emp values(2,'b',26);
insert into t_emp values(3,'c',25);
insert into t_emp values(4,'a',24);
insert into t_emp values(8,'f',22);
insert into t_emp values(9,'v',21);
show index from t_emp
select * from t_emp
- 我们在插入时是无序的,但是查询结果却是有序的
- 为什么要进行排序
为了方便快捷查询