数据库知识学习,数据库设计优化攻略(五)

2021-12-13 17:04:14 浏览数 (1)

2 设计技巧

2.1 分类拆分数据量大的表

对于经常使用的表(如某些参数表或代码对照表),由于其使用频率很高,要尽量减少表中的记录数量。

2.2 索引设计

在索引设计中,索引字段应挑选重复值较少的字段;在对建有复合索引的字段进行检索时,应注意按照复合索引字段

建立的顺序进行。

2.3 数据操作的优化

2.4 数据库参数的调整

数据库参数的调整是一个经验不断积累的过程,应由有经验的系统管理员完成。

2.5 必要的工具

2.6 避免长事务。

2.7 通俗地理解三个范式

通俗地理解三个范式,对于数据库设计大有好处。在数据库设计中,为了更好地应用三个范式,就

必须通俗地理解三个范式(通俗地理解是够用的理解,并不是最科学最准确的理解):

第一范式:1NF 是对属性的原子性约束,要求属性具有原子性,不可再分解;

第二范式:2NF 是对记录的惟一性约束,要求记录有惟一标识,即实体的惟一性;

第三范式:3NF 是对字段冗余性的约束,即任何字段不能由其他字段派生出来,它要求字段没有冗余。

没有冗余的数据库设计可以做到。但是,没有冗余的数据库未必是最好的数据库,有时为了提高运

行效率,就必须降低范式标准,适当保留冗余数据。具体做法是:在概念数据模型设计时遵守第三范式

,降低范式标准的工作放到物理数据模型设计时考虑。降低范式就是增加字段,允许冗余。

基本表及其字段之间的关系, 应尽量满足第三范式。但是,满足第三范式的数据库设计,往往不是

最好的设计。为了提高数据库的运行效率,常常需要降低范式标准:适当增加冗余,达到以空间换时间

2.8 提高数据库运行效率的办法

在给定的系统硬件和系统软件条件下,提高数据库系统的运行效率的办法是:

(1) 在数据库物理设计时,降低范式,增加冗余, 少用触发器, 多用存储过程。

(2) 当计算非常复杂、而且记录条数非常巨大时(例如一千万条),复杂计算要先在数据库外面。

(3) 发现某个表的记录太多,例如超过一千万条,则要对该表进行水平分割。水平分割的做法是,

以该表主键 PK 的某个值为界线,将该表的记录水平分割为两个表。若发现某个表的字段太多,例如超过八十个,则垂直分

割该表,将原来的一个表分解为两个表。

(4) 对数据库管理系统 DBMS 进行系统优化,即优化各种系统参数,如缓冲区个数。

(5) 在使用面向数据的 SQL 语言进行程序设计时,尽量采取优化算法。

总之,要提高数据库的运行效率,必须从数据库系统级优化、数据库设计级优化、程序实现级优化,这三个层次上同时

下功夫。

3 大数量性能优化设计

数据库优化包含以下三部分,数据库自身的优化,数据库表优化,程序操作优化

3.1 数据库自身的优化

3.1.1 增加次数据文件,设置文件自动增长(粗略数据分区)

➢ 增加次数据文件

从 SQL SERVER 2005 开始,数据库不默认生成 NDF 数据文件,一般情况下有一个主数据文件(MDF)就够了,但是有

些大型的数据库,由于信息很多,而且查询频繁,所以为了提高查询速度,可以把一些表或者一些表中的部分记录分开存储

在不同的数据文件里

由于 CPU 和内存的速度远大于硬盘的读写速度,所以可以把不同的数据文件放在不同的物理硬盘里,这样执行查询

的时候,就可以让多个硬盘同时进行查询,以充分利用 CPU 和内存的性能,提高查询速度。在这里详细介绍一下其写入的

原理,数据文件(MDF、NDF)和日志文件(LDF)的写入方式是不一样的:

数据文件:SQL Server 按照同一个文件组里面的所有文件现有空闲空间的大小,按这个比例把新的数据分布到所有有

空间的数据文件里,如果有三个数据文件 A.MDF,B.NDF,C.NDF,空闲大小分别为 200mb,100mb,和 50mb,那么写入一个

70mb 的东西,他就会向 ABC 三个文件中一次写入 40、20、10 的数据,如果某个日志文件已满,就不会向其写入

日志文件:日志文件是按照顺序写入的,一个写满,才会写入另外一个

由上可见,如果能增加其数据文件 NDF,有利于大数据量的查询速度,但是增加日志文件却没什么用处。

➢ 设置文件自动增长(大数据量,小数据量无需设置)

在 SQL Server 2005 中,默认 MDF 文件初始大小为 5MB,自增为 1MB,不限增长,LDF 初始为 1MB,增长为 10%,限制文

件增长到一定的数目,一般设计中,使用 SQL 自带的设计即可,但是大型数据库设计中,最好亲自去设计其增长和初始大小,

如果初始值太小,那么很快数据库就会写满,如果写满,在进行插入会是什么情况呢?当数据文件写满,进行某些操作时,

SQL Server 会让操作等待,直到文件自动增长结束了,原先的那个操作才能继续进行。如果自增长用了很长时间,原先的

操作会等不及就超时取消了(一般默认的阈值是 15 秒),不但这个操作会回滚,文件自动增长也会被取消。也就是说,这一

次文件没有得到任何增大,增长的时间根据自动增长的大小确定的,如果太小,可能一次操作需要连续几次增长才能满足,

如果太大,就需要等待很长时间,所以设置自动增长要注意一下几点:

1)要设置成按固定大小增长,而不能按比例。这样就能避免一次增长太多或者太少所带来的不必要的麻烦。建议对比

较小的数据库,设置一次增长 50 MB 到 100 MB。对大的数据库,设置一次增长 100 MB 到 200 MB。

2)要定期监测各个数据文件的使用情况,尽量保证每个文件剩余的空间一样大,或者是期望的比例。

3)设置文件最大值,以免 SQL Server 文件自增长用尽磁盘空间,影响操作系统。

4)发生自增长后,要及时检查新的数据文件空间分配情况。避免 SQL Server 总是往个别文件写数据。

因此,对于一个比较繁忙的数据库,推荐的设置是开启数据库自动增长选项,以防数据库空间用尽导致应用程序失败,

但是要严格避免自动增长的发生。同时,尽量不要使用自动收缩功能。

➢ 数据和日志文件分开存放在不同磁盘上

数据文件和日志文件的操作会产生大量的 I/O。在可能的条件下,日志文件应该存放在一个与数据和索引所在的数据

文件不同的硬盘上以分散 I/O,同时还有利于数据库的灾难恢复。

0 人点赞