一、影响数据库的因素
1.系统硬件
CPU 内存 IO 网络
2.系统环境
操作系统 数据库版本 操作系统参数配置 数据库的参数配置
3.系统的规模
并发量 数据量 用户量
4.数据库内部因素
查询效率(不合理的SQL语句、过多的表连接)
表设计不合理
隐式转换(字段类型转换)
统计信息
锁信息
二、数据库优化目标
1.提高系统的吞吐量
2.缩短系统的响应时间
有数据表明,用户发出请求后可以承受的等待时间是5-10秒。当一个应用,用户等待10秒还没有出来结果,用户就会失去信心。所以,除了个别的应用以外,必须优化应用,确保及时响应。
三、优化方向
优化:硬件、系统配置、数据表结构、SQL语句和索引
硬件:加内存、cpu
系统配置:修改数据库的参数、配置等;
数据表结构:设计合理不合理
SQL语句和索引:优化语句写法、增加索引等
四、什么时候优化
性能优化伴随着
系统计划和设计阶段以及整个应用的周期!
五、页与区
页:数据存储的基本单位(page),大小为8kb;
区:八个物理上连续的页的集合,用来有效的管理页;
页类型: 1).数据页(是保存除text/ntext/image类型以外的数据行);
2). 索引页:保存索引信息;
3).页面可用空间页:保存可用页空间信息;
4).文本/图像页:保存text/ntext/image类型的数据;
5).全局分配映射页:保存已经分配的盘区信息;
6).索引分配映射页:保存一个表或者索引使用的盘区信息;
7).批量修改映射页:保存在上次backup/log时执行批量操作所修改的盘区信息;
8).差量修改映射页:保存上次backup/database差异备份时所修改的盘区信息。
需要注意:日志文件不包含页,而是包含一系列日志记录;
数据页
数据页大小为8kb
页面报头
数据行
行偏移矩阵
六、范式
1.第一范式:强调的是列的原子性、即列不能够再分成其它列;
2.第二范式:首先要满足它是1NF,另外还需要包含两部分内容:一是表必须有一个主键;二是没有包含在主键中的列必须完全依赖于主键,而不能只依赖于主键的一部分;
3.第三范式:首先是2NF,另外非主键列必须直接依赖于主键,不能存在传递依赖。即不能存在:非主键列A依赖于非主键列B,非主键列B依赖于主键的情况;
反范式设计
不满足范式的模型,就是反范式模型。
就是用空间来换取时间,把数据冗余在多个表中,当查询时可以减少或者是避免表之间的关联;
七、设计表的性能因素考虑
1.适合的字段类型;
2.主键:每张表都需要一个主键,用来标识唯一的一条数据;
3.外键
4.约束和规则
合理的需求情况下字段尽量少,对频繁使用的大表进行分割,将不常使用的字段信息存在其它表中,将大对象的列和普通字段分离出来,放在单独的数据文件上。