数据库分为关系型数据库与非关系型数据库
常见的关系型数据库有:Oralce Mysql Sqlserver ,非关系型数据库:Redis,Hbase
关系型数据库
关系型数据库系统(RDBMS)
索引
-
为什么使用索引
在数据库查找的时候用select查询是走的全表扫描当数据量大的时候会很慢,而加入索引会减少查询时间。但是当数据量小的时候直接全表扫描会比索引快。
-
用什么数据做索引好
一般用主键、唯一键唯一键做索引。
-
索引的数据结构
树(二叉树、B-Tree 、 B+ - Tree)、Hash
B-Tree
定义
- 根节点至少包括两个孩子,根节点至少有一个关键字
- 树中每一个节点至少含有M(M>=2)个孩子
- 除跟和叶子节点每个节点至少有ceil(m/2)个孩子( ceil函数返回大于或等于 x 的最小的整数值)
- 所有叶子节点位于同一层
- 假设每个非终端节点中包含有N个关键字信息,其中
1.ki(i=1…n)为关键字,且关键字按顺序升序排列k(i-1)<ki
2.关键字的个数必须满足ceil(m/2)-1<=n<=m-1
3.非叶子节点的指针p[1],p[2]…p[M];其中p[1]指向关键字小于k[1]的子树,p[M]指向关键字大于k[M-1]的子树,其他p[i]指向关键字属于(k[i-1],k[i])的子树
B树的查找
- 从根节点开始,36比最大关键字35大所以走向P3指向的子树
- 36又比最小关键字65小所以走向P1指向的子树
- 在此树找到目标关键字36
B树的插入
- 根据插入的数据找到叶子节点
- 判断插入后当前节点数据是否小于等于m-1,如果等于则结束,否则进入3
- 以节点中心的key为中心分裂成左右两部分,然后将中心的key插入到父节点中,然后中心的key的左子树为分裂的左部分,右子树为分裂的右部分。
例如将3,90插入下图的三阶B树
插入3,因为3小于30,所以找到左子树20,又因为小于20,所以找到叶子节点5,插入符合小于等于2所以插入三的B树是
插入90时,因为叶子节点中超过了2,所以要进行步骤三的操作
85的左树为75,右树是90(xmind画的图所以线有点问题),这个时候50,70,85又超过了2所以也需要执行步骤三
最后的树结构是这样的