关于数据库设计过程中一些知识点。
关系型数据库设计
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会一直向右直到遇到范围查询就停止匹配。
索引越多越好吗?
数据量小的表不需要索引。
需要维护成本。
创建索引需要空间。