Mysql 八进制 - 常见问题整理(小林编码精简版 - 自我总结)
1、什么是索引?
索引就是数据的目录,方便用户更加快捷的查找数据。
2.索引的分类
数据结构划分:B+、哈希、full-text索引
物理存储划分:主键索引、辅助索引
字段特性:主键索引、前缀索引、普通索引、唯一索引
字段个数:单列索引、联合索引。
3.为什么选择B+不选择B
因为B+只在叶子节点进行存放数据,但是B树会在节点存放 ,所以B+的单个节点的数据量更小,在相同Io下,查询的节点更多。
B+使用的是双向链表,适合作用于范围查找
4.为什么选择B+不选择二叉树
二叉树是一个节点只有俩个节点,会导致层数的楼层过高,增加Io读写的次数。
5.为什么选择B+不选hash
首先哈希他的取得时间复杂度是O(1),但是呢,哈希表只适合做等值查找,不可以做范围查找。
6.索引的优缺点,什么时候适用于,什么时候不适用
优点:加快读取速度,提高数据库的读取数据得能力。
缺点:消耗硬盘容量、维护索引的时间随着数据的上升成倍增长、在数据的增删改中需要花费更多的时间
适用于:经常查询where语句,有唯一字段、经常作用域order by 还有group by
不适用:频繁进行增改删的数据、字段中存在大量重复数据、表数据太少
7.优化索引的方法
前缀索引优化
覆盖索引优化
主键有序自增
防止索引失效
8.主键为什么最好是自增
因为在B+树中,数据会跟着主键有序存放,如果是自增,就不需要查找,只要通过追加即可,但是由于不是有序,我需要分裂表,分裂表就很容易产生空间碎片。
9.为什么索引最好是notNULL
处理NULL需要进行单独处理,增加处理时间;null会有null字段标志,会浪费一个字节的空间。
10.索引失效的原因
使用了like %abc,或者是使用了like %abc%索引应该使用最左原则,左边的优先级要大于右边的
使用or语句的时候,左边使用了索引,而右边没有
在索引字段进行计算、函数、类型转换
11.扫描的类型分为哪些
ALL(全表扫描)
index(索引扫描)
range(索引范围扫描)
ref(非唯一索引扫描)
eq_ref(唯一索引扫描)---一般只出现在联合索引之中
const(常量级)
12.优化索引的方法
1.覆盖索引
2.前缀索引
3主键自增
4索引为 not null