前言:
当前各位老铁们对“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索引重排