0
点赞
收藏
分享

微信扫一扫

秒懂MySQL索引,索引如此简单~~

_铁马冰河_ 2022-03-12 阅读 59

目录

1、索引是什么?

2、为什么要用索引?

3、索引的分类

4、索引的SQL操作

4.1手动创建普通索引

4.2手动创建唯一索引

4.3创建主键索引(给表加上主键约束) 

 4.4查看索引

 4.5删除索引

5、索引的优缺点分析/使用场景/注意事项

        5.1 优缺点分析

        5.2 使用场景

        5.3 注意事项 

6、问题

        6.1 索引 vs 约束

        6.2 索引 vs 书的目录


1、索引是什么?

        索引是一种特殊的文件,索引中包含了表数据的记录指针。索引通俗地理解,它就类似书的目录(类似而不等同于后面会讲区别),通过目录我们可以快速找到我们要找的内容。(通过索引我们可以快速找到我们想要的数据)

        本文讲的索引/事务都是基于MySQL 5.5 之后默认的数据库引擎 InnoDB。

MySQL数据库引擎?MySQL常见的引擎有哪些?

        在MySQL5.5 之前 默认引擎为MyISAM,5.5之后默认的引擎为InnoDB。二者比较:

        ①稳定性:InnoDB 引擎支持事务(保证了数据的稳定性),稳定性比MyISAM好,性能一般

        ②性能:MyISAM 性能比较高,但不支持事务。

存储数据的模组:

        ①磁盘:容量大、价格低廉、操作速度慢、可持久化(重启之后数据还是存在的)。

        ②内存:容量小、价格比较贵、操作速度块、不可持久化。

        ③CPU缓存:容量小、操作速度极快,不可以被持久化。

2、为什么要用索引?

        使用索引之后大大提升了查询的效率

        a)使用索引可以避免顺序查询,可以直接将查询的数据定位出来,效率大大提升。

        b)使用索引可以将数据库中的关键索引信息存储到内存中,而内存的操作速度远比磁盘块(若不用索引 其实就是去磁盘上进行数据查询)

3、索引的分类

        按照是否为主键:

                - 主键索引(聚簇索引/聚集索引)

                - 非主键索引(非聚簇索引/非聚集索引/二级索引)

         按照特征分:

                - 普通索引

                - 唯一索引

                - 联合索引(就是由一张表的多个字段组成的索引)

4、索引的SQL操作

        主键索引、唯一索引它是在创建表的时候,如果设置了主键约束或者是唯一约束,就会自动生成主键索引或唯一索引。

PS:如果创建外键约束那么也会产生索引

注意:

        ①在创建索引的时候会创建对应的约束,而删除索引的时候也会删除对应的约束。

        ②唯一索引在创建时,要保持原先数据符合唯一约束,这样才能成功创建唯一索引。如下:

 

4.1手动创建普通索引

 

语法:

4.2手动创建唯一索引

4.3创建主键索引(给表加上主键约束) 

 4.4查看索引

show index from table_name;

 

 4.5删除索引

drop index 索引名 on 表名;

-- 每个索引名在一张表中是唯一的,不能重复。

5、索引的优缺点分析/使用场景/注意事项

        5.1 优缺点分析

                优点:可以提高数据查询的效率

                缺点:

                        ①索引增加了维护成本,因为索引是使用B+树实现的,在数据添加和删除时需要重新整理树的结构,这样会带来新的开销。

                        ②使用索引会增加存储的成本(磁盘/内存)

                        ③如果索引过多会对MySQL的优化器造成一定的负担。

        5.2 使用场景

        创建索引需要考虑的因素:

                        ①数据量是否足够大,查询 速度是否比较慢

                        ②创建索引的列是否为经常使用的查询条件。

        不适合创建索引的场景:

                        ①读比较低频,而数据添加和删除比较高频的表业务,不适合建索引,比如日志表

                        ②MySQL服务器本身安装的电脑上磁盘空间或内存空间不足的抢矿下,不要创建。

        5.3 注意事项 

                如果对已经存在的很多数据的表新增索引的时候,切记不要在生产环境上执行(找一个没有用户使用的时间进行操作),因为索引创建会锁表,其他业务场景只能排队等待。结合游戏更新来理解(更新期间 会停服)

6、问题

        6.1 索引 vs 约束

               ①创建索引的时候会自动创建约束,并且创建约束的时候也会自动创建索引。

                ②索引和约束是不同的定义,约束时来保证数据的正确性,而索引是用来提高查询效率的。

        6.2 索引 vs 书的目录

                宏观:可以认为索引就相当于书的目录。

                微观:索引不等同于书的目录,因为一本书只有一个目录,而数据库中一张表可以有多个索引。

举报

相关推荐

0 条评论