【MySQL详解】索引、事务、锁、日志
三大范式
- 第一范式:数据库中表的字段都是不可分割的最小部分
- 第二范式:在第一范式的基础上,所有非码属性都必须完全依赖于候选码
- 第三范式:在第二范式的基础上,任何非主属性都不能直接或间接依赖于其他非主属性
什么是索引,有什么好处
索引可以类比成图书的目录,通过索引能够快速找到数据的位置,提高查询效率
索引的分类是什么
- 按数据结构分:B+树索引,Hash索引,Full-text索引
- 按物理存储分:聚簇索引,非聚簇索引
- 按字段种类分:主键索引,唯一索引,普通索引,前缀索引
- 按字段个数分:单列索引,联合索引
聚簇索引和非聚簇索引的区别是什么
- 聚簇索引的叶子节点存放的是完整的实际数据,而非聚簇索引存放的是指向数据行的指针或者主键值
- 聚簇索引有且只能有一个,而非聚簇索引可以有多个
B+树的特性是什么
- 叶子节点都在同一层,确保了所有数据项的检索都有相同的IO延迟,叶子结点之间形成链表,有助于范围查询和按顺序访问
- 叶子节点存放数据,非叶子节点只存放键值。相比于B树在数据量比较大的时候B+树的层数更少,IO次数更少。
B+树和B树的区别
- B+树的非叶子结点只存放键值而B树还存放部分数据,因此B+树的非叶子结点可以存放更多的索引,因此B+树会更加矮
- B+树的叶子节点通过链表相连,而B树没有相连,因此B+树能更好的进行范围查询和顺序访问。
- B+树有更多的冗余结点,这些冗余结点可以使对B+树进行插入删除时更加方便
索引失效有哪些情况
- 当我们使用左或者左右模糊匹配时,会发生索引失效
- 当我们对索引使用函数时会失效
- 当我们对索引进行表达式计算时会失效
- 当我们将将字符串与数字进行比较时会自动调用函数进行转换,因此相当于使用了函数,索引会失效
- 当我们没有遵循最左匹配原则时,索引会失效
- 在WHERE子句中,如果在OR前的条件列是索引列,而在OR后的条件列不是索引列,那么索引会失效