数据库知识(上)

关于数据库设计过程中一些知识点。

关系型数据库设计

1、存储管理:将数据的逻辑关系转换为物理存储关系。

2、缓存机制:优化执行效率。

3、SQL解析。

4、日志管理:记录操作,用于恢复数据。

5、权限划分:多用户管理模块。

6、容灾机制:用于灾难恢复。

7、优化数据库查询效率:索引管理。

8、并发操作:锁管理。

索引模块

目的:提高查询效率,避免全表扫描。

主键,唯一键,普通键可作为索引。

索引模块的数据结构

二叉查找树:平衡二叉树,红黑树。

B-tree

B+-tree(主流):1、子树指针个数等于关键字。2、数据保存在叶子节点中。3、叶子节点的链指针指向下一个叶子节点。

哈希结构:效率较高,不能排序,不能范围查询,不能使用部分索引查询,不能避免表扫描。

BitMap(Oracle支持)

密集索引与稀疏索引

密集索引的每个搜索码都对应一个索引值。

稀疏索引只为索引码的某些值建立索引项。

InnoDB(密集):非主键索引存储相关键位和对应的主键值,包含两次查找。

MyISAM(稀疏)。

定位并优化慢查询

打开慢查询日志并设置慢查询时限。

使用Explain语句分析:
1、Type属性为index或all,需要优化。2、extra为文件排序或临时表,需要优化。

修改sql或尽量让sql走查询。

最左匹配原则

mysql会一直向右直到遇到范围查询就停止匹配。

索引越多越好吗?

数据量小的表不需要索引。

需要维护成本。

创建索引需要空间。