龙空技术网

MySQL第46课~10道关于索引的面试题2

滋滋滋饿了 101

前言:

当前各位老铁们对“mysql索引重排”可能比较注意,咱们都想要剖析一些“mysql索引重排”的相关知识。那么小编也在网上网罗了一些对于“mysql索引重排””的相关内容,希望看官们能喜欢,看官们快快来了解一下吧!

所有内容收录在合集~MySQL入门到熟练。欢迎点赞关注我哦~

1 为什么官方建议使用自增长主键作为索引?

(说一下自增主键和字符串类型主键的区别和影响)

●自增主键能够维持底层数据顺序写入

●读取可以由b+树的二分查找定位

●支持范围查找,范围数据自带顺序

字符串无法完成以上操作

2 使用int自增主键后最大id是10,删除id10和9,再添加一条记录,最后添加的id是几?删除后重启mysql然后添加一条记录最后id是几?

删除之后

●如果重启,会从最大的id开始递增

●如果没重启,会延续删除之前最大的id开始递增

3 索引的优缺点是什么?

优点

聚簇(主键)索引:

1 顺序读写

2 范围快速查找

3 范围查找自带顺序

非聚簇索引:

●条件查询避免全表扫描scan

● 范围,排序,分组查询返回行id,排序分组后,再回

表查询完整数据,有可能利用顺序读写●覆盖索引不需要回表操作

索引的代价

索引是个好东西,可不能乱建,它在空间和时间上都会有消耗:

空间上的代价

每建立一个索引都要为它建立一棵B+树,每一棵B+树的每一个节点都是一个数据页,一个页默认会占用16KB的存储空间,一棵很大的B+树由许多数据页组成,那就是很大的一片存储空间。

●时间上的代价

每次对表中的数据进行增、删、改操作时,都需要去修改各个B+树索引。而增、删、改操作可能会对节点和记录的排序造成破坏,所以存储引擎需要额外的时间进行一些记录移位、页面分裂、页面回收等操作来维护好节点和记录的排序。如果我们建了许多索引,每个索引对应的B+树都要进行相关的维护操作,会给性能拖后腿。

B树和B+树都可以作为索引的数据结构,在MySQL中采用的是B+树。

但B树和B+树各有自己的应用场景,不能说B+树完全比另一个好,反过来也一样。

4 使用索引一定能提升效率吗?

不一定

●少量数据全表扫描也很快,可以直接获取到全量数据

●唯一索引会影响插入速度,但建议使用

●索引过多会影响更新,插入,删除数据速度

5 如果是大段文本内容,如何创建(优化)索引?

B树和 B+树都可以作为 索引的数据结构,**在MySQL 中采用的是 B+树。**

第一种方式是分表存储,然后创建索引

第二是使用es为大文本创建索引

6 什么是聚簇索引?

聚簇索引数据和索引存放在一起组成一个b+树

7 一个表中可以有多个(非)聚簇索引吗?

聚簇索引只能有一个,非聚簇索引可以有多个

8 聚簇索引与非聚集索引的特点是什么?

9 CRUD时聚簇索引与非聚簇索引的区别是什么?

●聚簇索引插入新值比采用非聚簇索引插入新值的速度要慢很多,因为插入要保证主键不能重复

●聚簇索引范围,排序查找效率高,因为是有序的

●非聚簇索引访问需要两次索引查找,第一次找到主键值,第二次根据主键值找到行数据

10 非聚簇索引为什么不存数据地址值而存储主键?

因为聚簇索引中有时会引发分页操作、重排操作数据有可能会移动

标签: #mysql索引重排