MySQL的执行引擎有哪些?
MySQL 的执行引擎用于查询的执行和数据的存储,常见的 MySQL 存储引擎包括 InnoDB、MyISAM、Memory。
- InnoDB:MySQL 的默认存储引擎。支持事务 ACID、行级锁和外键约束。适用于需要事务和高并发的应用。
- MyISAM:MySQL 早期版本的默认引擎。不支持事务、行级锁和外键约束。采用全文索引。使用于需要访问速度快、数据量不大的场景。
- Memory:将数据全部放入内存中。访问速度快。但数据库一旦崩溃重启,所有数据都会丢失。
MySQL为什么使用B+树来作索引?
B+ 树是 B 树的变种,提供了更好的数据检索、插入和删除、范围查询性能。
- 单点查询:B 树的单点查询时间复杂度为 O(logn)。虽然 B 树的单点查询速度更快,但由于 B 树的非叶子节点和叶子节点都存储索引和数据,导致 B 树的查询速度不稳定。而 B+ 树由于非叶子节点只存储索引,叶子节点存储索引和数据,所以 B+ 树的查询速度更加稳定。且在数据量相同的时候,B+ 树的非叶子节点能够存储更多的索引,会比 B 树更加矮胖,磁盘的 I/O 次数更少。
- 数据的插入和删除:由于 B+ 树有大量冗余节点,在删除节点时很可能只需在叶子节点操作,不涉及非叶子节点的变形。在插入时也最多涉及到一条路径的分裂。而 B 树插入和删除数据时可能会有比较复杂的节点的变形。
- 范围查询:B+ 树的叶子节点之间用双向链表连接,可以比较方便地进行范围查询。而 B 树叶子节点之间没有双向链表连接,范围查询时需要中序遍历搜索二叉树,磁盘 I/O 次数多,效率低。
说一下索引失效的场景?
索引失效指的是查询操作不能利用索引,可能进行全表查询,从而导致查询性能下降。
- 使用 or 操作,前面是索引列,后面不是索引列。
- 对索引列使用函数或表达式计算。
- 索引列发生了类型转换。
- 使用 % 开头的 like 模模匹配。
- 联合索引不遵循最左匹配原则。
- 联合索引中间使用的范围查询,那么右边的索引会失效。
831

被折叠的 条评论
为什么被折叠?



