数据库基础——索引
数据库架构
RDBMS
-
索引模块
问题:
-
为什么要使用索引
快速查询数据
-
什么样的信息能成为索引
主键、唯一键以及普通键等
-
索引的数据结构
生成索引,建立二叉查找树进行二分查找
生成索引,建立B-Tree结构进行查找
生成索引,建立B+-Tree结构进行查找
生成索引,建立Hash结构进行查找
二叉查找树
是平衡二叉树。左右子树高度差不能超过1,用二分查找。时间复杂度:O(logn) 例:
缺点,当删除节点再插入节点时,时间复杂度变为O(n)。例:
的确,可以每插入一个数据再进行旋转树,再次平衡。但是会有第二个问题。影响程序运行的问题主要在I/O操作,每次读入一个节点就会I/O操作。但是二叉树只有两个节点,如果数据块很多,树的深度就会很大,就会进行很多次I/O操作,查询的性能就会比全表扫描慢的多,无法优化查询。
运用B-Tree
结构:(3阶B树)
定义:
根节点至少包含两个孩子
树中每个节点最多含有m个孩子(m>=2)
除根节点叶节点外,其他每个节点至少有ceil(m/2)个孩子
所有叶子结点都位于同一层
运用B+-Tree
结构:
结论:
Hash索引
密集索引和稀疏索引
Mysql主要有两种存储引擎,MyISAM(均是稀疏索引)和InnoDB(有且仅有一个密集索引)
默认是MyISAM
InnoDB索引和数据是存在一起的(一个文件),MyASM是分开的。
索引额外的问题
1.
index all 全表扫描
2.最左匹配原则的成因