1.什么是索引?
2.为什么需要索引?
3.索引的作⽤
4.索引优缺点和使⽤场景
4.1 索引优点
4.2 索引缺点
4.3 不适合使⽤场景
4.4 注意事项
5.索引使⽤
1.什么是索引?
索引是⼀种特殊的⽂件,包含着对数据表⾥所有记录的引⽤指针。可以对表中的⼀列或多列创建 索引,并指定索引的类型,各类索引有各⾃的数据结构实现。(通俗来说就是书的目录,通过这个目录我们可以快速找到相应的内容) 数据库引擎简介: MySQL 数据库有很多引擎,MySQL 和引擎的关系就像汽⻋⼚商和汽⻋⻋型的关系,⼀个⼚商 (MySQL)可以有多种⻋型(多个引擎)。 MySQL 最著名的引擎有两个:InnoDB 和 MyISAM,MyISAM 是 MySQL 5 . 5 之前默认的引擎, MySQL 5 . 5 之后的默认引擎是 InnoDB,它们最⼤的区别是 MyISAM 不⽀持事务,所以有很⼤的数据不完整性⻛险(也就是数据的业务执⾏了⼀半),⽽ InnDB ⽀持事务,但 MyISAM 的性能⽐ InnoDB ⾼。 本文的索引和事务都是基于 InnoDB 引擎的。 ms问题:说一下MySQL的数据库引擎,MySQL常见的引擎都有哪些? 答:MySQL5.5之后默认的数据库引擎InnoDB、MySQL5.5之前默认的引擎MyISAM。 1. 稳定性:InnoDB引擎支持事务(保证数据的稳定性),稳定性比MyISAM好,MyISAM不支持事务。 2. 性能:MyISAM性能比较高,而InnoDB性能不如MyISAM。 可以使⽤以下命令查询当前数据库的引擎:2.为什么需要索引?
数据库中数据存储在磁盘,磁盘的顺序查询速度是很慢的,所以的顺序查找指的是读取磁盘中的数据⼀ 条⼀条的进⾏查找。
1. 索引就是为了避免顺序查询,提供查询速度的。
2. 使用索引可以将数据库中的关键索引信息存储到内存中,而内存的操作速度远比磁盘快。
查询数据存储的⽬录:show variables like '%dir%';
3.索引的作⽤
数据库中的表、数据、索引之间的关系,类似于书架上的图书、书籍内容和书籍⽬录的关
系。
索引所起的作⽤类似书籍⽬录,可⽤于快速定位、检索数据。
索引对于提⾼数据库的性能有很⼤的帮助。
4.索引优缺点和使⽤场景
4.1 索引优点
1. 提⾼数据库查询效率。
2. 减少主从复制从库的延迟时间。
4.2 索引缺点
1. 索引维护成本很⾼,因为它使⽤的 B+ 树,每次新增、删除数据都需要整理树结构。
2. 占⽤更多的存储空间(磁盘和内存):每个索引都对应⼀个 B+ 树。
3. 索引过多会对 MySQL 的优化器造成⼀定的负担。
创建索引需要考虑的因素:
1. 数据量是否足够大,查询速度是否比较慢。
2. 创建索引的列是否是经常使用的查询条件。
4.索引优缺点和使⽤场景
4.1 索引优点
1. 提⾼数据库查询效率。
2. 减少主从复制从库的延迟时间。
4.2 索引缺点
4.2 索引缺点
4.3 不适合使⽤场景
1. 读比较低频,而添加和删除比较高频的业务,不适合使用索引,比如日志表(不经常查询,但是添加非常高频,每次添加都需要重新整理索引)
2. MySQL服务器本身安装的电脑上磁盘空间不足的情况下,就不要创建。
4.4 注意事项
1. 如果是不常使⽤的列,或经常做插⼊、修改操作的列,不适合加索引,因为添加、删除需要重新整理索引,速度很慢。 2. 索引会占⽤额外的磁盘空间,或磁盘空间不⾜时,不考虑创建索引。 3. 不要在线上环境(不可以在用户使用的时间段创建索引)随意创建索引,创建索引会锁表,线上数量⼤,会导致其他所有接⼝不可⽤,从⽽造成重⼤事故。5.索引使⽤
5.1 索引分类(ms)
索引的分类有以下⼏种: ●主键索引(聚簇索引):⼀种特殊的唯⼀索引,不允许有空值,⼀般是在建表的时候同时创建主键索引(通过 primary key)。 ●⾮主键索引(⼆级索引):除主键索引之外的其他索引。 ●唯⼀索引:不能重复的索引。 ●普通索引:可以重复也可以为 NULL 的索引。 ●联合索引:使⽤多个字段联合组成的索引。 注意:创建主键约束(PRIMARY KEY)、唯⼀约束(UNIQUE)、外键约束(FOREIGN KEY)时,会⾃动创建对应列的索引。 索引与约束: 1. 创建索引的时候会自动创建约束,并且在创建约束的时候,月会自动创建索引。 2. 索引和约束是不同的业务定义,约束是用来规范数据的正确性,而索引是用来提升数据库的程序性能的。 5 . 2 查看索引show index from 表名 ;5 . 2 . 1 创建普通索引
create index 索引名 on 表名 ( 字段名 [ , 字段名 2... ]) ; 给班级表的 name 添加普通索引: create index idx_class_name on class ( name ) ;5 . 2 . 2 创建唯⼀索引
create unique index 索引名 on 表名 ( 字段名 ) ; 给班级表的 name 添加唯⼀索引: create unique index idx_un_class_name on class ( name ) ;5 . 2 . 3 添加主键索引
alter table table_name add primary key (column); 给表t1的id添加主键索引: alter table t1 add primary key(id);
5.3 创建索引
在创建主键 primary key/unique/foreign key 时会⾃动创建索引,⽽对于⾮主键、⾮唯⼀约束、⾮外键 的字段,可以⼿动创建索引。create table T( id int primary key, k int not null , name varchar ( 16 ), index (k) )engine = InnoDB;5 . 4 删除索引
drop index 索引名 on 表名 ;
注意:
●在创建索引的时候会创建对应的约束,而删除索引的时候也会删除对应的约束。
● 唯一索引在创建的时候,要确保原先数据符合唯一约束,这样才能成功的创建唯一约束,否则会创建失败。



