数据库八股--索引(待持续完善)
mysql执行原理和sql执行顺序
https://zhuanlan.zhihu.com/p/352436463 https://blog..net/weixin_47043353/article/details/108704323 连接–缓存–分析(词法、语法分析)–优化–执行–选取存储引擎读取数据
索引基础
建索引的方法 1.什么是索引? 索引其实是一种数据结构,能够帮助我们快速的检索数据库中的数据。 2.为什么要建索引? 没有索引,就相当是全文搜索;加了索引B+树或者hash树提高搜索效率 3.什么时候建索引?什么时候不建索引? https://blog..net/Merciful_Lion/article/details/124649408?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-124649408-blog-105779043.pc_relevant_multi_platform_whitelistv4&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-124649408-blog-105779043.pc_relevant_multi_platform_whitelistv4&utm_relevant_index=1 建: 1.一个表的主键、外键 2.需要控制唯一的字段 3.频繁作为查询条件的字段 4.排序的字段 5.DISTINCT时 6. 不建: 1.表记录少 2.不常使用的表 3.更新比较频繁的也不适合加索引 = 区分度低的字段不适合加索引(如性别)4.索引失效场景? 5.什么是联合索引? 6.什么是回表查询
如果语句是 select * from T where k=5,即普通索引查询方式 则需要先搜索 k 索引树,得到 ID 的值为 500,再到 ID 索引树搜索一次,这个过程称为回表查询。 所以一般用主键索引查询 mysql> select * from T where ID=500; +-----+---+-------+ | id | k | name | +-----+---+-------+ | 500 | 5 | name5 | +-----+---+-------+
(a,b,c,d) a = 1 and b = 2 and c > 3 and d = 4 当遇到范围查询(>、<、between、like)就会停止匹配。! 全局无序局部有序,范围查询没办法保证局部有序
8.什么是索引覆盖 9.什么是索引下推
索引–类型
1.索引有几种类型? 普通索引: 是最基本的索引,它没有任何限制 唯一索引: 索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一 主键索引: 是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值。 组合索引: 一个索引包含多个列,实际开发中推荐使用组合索引。 全文索引: 全文搜索的索引。FULLTEXT 用于搜索很长一篇文章的时候,效果最好。只能用于InnoDB或MyISAM表,只能为CHAR、VARCHAR、TEXT列创建。 2.主键索引和唯一索引的区别 主键必唯一,但是唯一索引不一定是主键; 一张表上只能有一个主键,但是可以有一个或多个唯一索引。 3.什么是聚簇索引和非聚簇索引 https://zhuanlan.zhihu.com/p/528069989 聚簇索引:一般指主键索引,主键索引叶子节点存放数据的地址,根据地址找直接对应数据 非聚簇索引:非聚簇索引叶子节点上存储的是id,根据id再去聚集索引上找数据,进行回表查询 4.聚簇索引优缺点? 5.联合索引需要注意什么?
索引–优化
1.索引优化手段?
索引–数据结构
B+树 1.hash索引和B+树索引的区别? 2.为什么B+树比B树更适合实现数据库索引 B树是一个多路平衡的二叉查找树;红黑树是二路查找,查找层数会多 B树是每个节点都存了数据。 B+树是最下面一层节点存了数据,然后最后一层节点兄弟节点之间有指针相连。 优势:1.查找层数相同,稳定 2.全文检索只需要遍历最后节点 ,不需要层序遍历 3.B+树不存放数据信息,在分片中的排序更加紧密
