1. MySQL的执行过程
索引存在的作用: 就是为了减少磁盘IO的次数。
2. 索引的数据结构选择
- 索引需要持久化存储吗?
需要的。
- 索引到底存储了什么数据?
索引关键字段-文件位置-文件的偏移量(地址)
- 使用什么数据结构?
树和Hash表。
- 什么是OLAP?其作用是什么?
OLAP表示联机分析处理。是对海量数据进行分析,不要求在短时间内返回结果,应用场景比如数据仓库。
- 什么是OLTP?其作用是什么?
OLTP是联机事物处理。就是我们所说的增删盖查。应用场景比如说是数据库。
3. 数据结构的选择
cpu读取磁盘中的数据单元(页),每个页的大小由操作系统决定,一般是4k或者8k,程序在读取磁盘数据时,一般读取页的整数倍(16k)。
- BST:容易退化成链表。
- AVL-Tree:是严格意义上的平衡二叉树,查找非常OK,但是插入的代价变得很大。适合读多写少的业务。
- 红黑树: 是不严格平衡二叉树,相当于中和了一下读写的性能消耗。
当节点很多时,二叉树的深度还是会变得不可接受,所以MySQL中选择多叉搜索树。
- B-树:数据存储在节点中。如上图。
* - B+Tree:将数据全部移动到叶子结点上去,那么分支结点只存储指针,假设一个数据块的大小为16kb,那么一个分支结点就可以存储好多个指针。让一个B+树可以支持千万级别的表。B+树的叶子结点是被双相链表所链接起来的。
MySQL Innodb是将数据和索引存放在一个文件当中的。
MySQL MyISAM是将索引和数据分开来存储的。