数据库系统原理及MySQL应用教程(第2版)
上QQ阅读APP看书,第一时间看更新

4.5 物理结构设计

数据库的物理结构设计是利用数据库管理系统提供的方法、技术,对已经确定的数据库逻辑结构,以较优的存储结构、数据存取路径、合理的数据库存储位置及存储分配,设计出一个高效的、可实现的物理数据库结构。

由于不同的数据库管理系统提供的硬件环境和存储结构、存取方法不同,提供给数据库设计者的系统参数以及变化范围也不同,因此,物理结构设计一般没有一个通用的准则,它只能提供一个技术和方法供参考。

数据库物理结构设计通常分为两步。

1)确定数据库的物理结构,在关系数据库中主要指存取方法和存储结构。

2)对物理结构进行评价,评价的重点是时间和空间效率。

如果评价结果满足原设计要求,则可进入到物理结构实施阶段,否则,就需要重新设计或修改物理结构,有时甚至要返回逻辑结构设计阶段修改数据模型。

4.5.1 物理结构设计的内容和方法

物理结构设计得好,可以使各业务的响应时间短、存储空间利用率高、事务吞吐率大。因此,在设计数据库时首先要对经常用到的查询和对数据进行更新的事务进行详细的分析,获得物理结构设计所需要的各种参数。其次,要充分了解所用DBMS的内部特征,特别是系统提供的存取方法和存储结构。对于数据库查询事务,需要得到如下信息。

1)查询所涉及的关系。

2)连接条件所涉及的属性。

3)查询条件所涉及的属性。

4)查询的列表中涉及的属性。

对于数据更新事务,需要得到如下信息。

1)更新所涉及的关系。

2)更新操作所涉及的属性。

3)每个关系上的更新操作条件所涉及的属性。

此外,还需要了解每个查询或事务在各关系上运行的频率和性能要求。假设某个查询必须在1s内完成,则数据的存储方式和存取方式就非常重要。

应该注意的是,数据库上运行的操作和事务是不断变化的,因此,需要根据这些操作的变化不断地调整数据库的物理结构,以获得最佳的数据库性能。

通常关系数据库物理结构设计的内容主要如下。

(1)确定数据的存取方法(建立存取路径)

存取方法是快速存取数据库中数据的技术。数据库管理系统一般都提供多种存取方法。常用的存取方法有索引方法、聚簇方法和HASH方法。具体采取哪种存取方法由系统根据数据库的存储方式决定,一般用户不能干预。

所谓索引存取方法实际上就是根据应用要求确定对关系的哪些属性列建立索引,对哪些属性列建立组合索引,对哪些索引要设计为唯一索引等。

建立索引的一般原则如下。

如果一个(或一组)属性经常作为查询条件,则考虑在这个(或这组)属性上建立索引(或组合索引)。

如果一个属性经常作为聚集函数的参数,则考虑在这个属性上建立索引。

如果一个(或一组)属性经常作为表的连接条件,则考虑在这个(或这组)属性上建立索引。

如果某个属性经常作为分组的依据列,则考虑在这个属性上建立索引。

一个表可以建立多个非聚簇索引,但只能建立一个聚簇索引。

索引一般可以提高数据查询性能,但会降低数据修改性能。因为在进行数据修改时,系统要同时对索引进行维护,使索引与数据保持一致。维护索引要占用较多的时间。存储索引也要占用空间信息。因此,在决定是否建立索引时,要权衡数据库的操作,如果查询多,并且对查询性能要求较高,可以考虑多建一些索引:如果数据更改多,并且对更改的效率要求比较高,可以考虑少建索引。

(2)确定数据的物理存储结构

物理结构设计中,一个重要的考虑是确定数据的存储位置和存储结构,包括确定关系、索引、聚簇、日志、备份等的存储安排和存储结构,确定系统配置。确定数据存储位置和存储结构的因素包括存取时间、存储空间利用率和维护代价,这3个方面常常是相互矛盾的,必须进行权衡,选择一个折中方案。

常用的存储方法如下。

● 顺序存储:这种存储方式的平均查找次数是表中记录数的一半。

● 散列存储:这种存储方式的平均查找次数由散列算法决定。

● 聚簇存储:为了提高某个属性的查询速度,可以把这个或这些属性上具有相同值的元组集中存储在连续的物理块上,大大提高对聚簇码的查询效率。

用户可以通过建立索引的方法改变数据的存储方式。但其他情况下,数据是采用顺序存储还是散列存储,或是采用其他的存储方式是由数据库管理系统根据具体情况决定的,一般它都会为数据选择一种最适合的存储方式,而用户并不能对其进行干涉。

4.5.2 评价物理结构

数据库物理结构设计过程中需要对时间效率、空间效率、维护代价和各种用户要求进行权衡,其结果可能产生多种方案。数据库设计人员必须对这些方案进行细致的评价,从中选择出一个较优的合理的物理结构。

评价物理结构的方法完全依赖于所选用的DBMS,主要考虑操作开销,即为使用户获得及时、准确的数据所需要的开销和计算机资源的开销。具体可以分为以下步骤。

1)查询和响应时间。响应时间是从查询开始到查询结束之间所经历的时间。一个好的应用程序设计可以减少CPU的时间和I/O时间。

2)更新事务的开销,主要是修改索引、重写数据块或文件以及写校验方面的开销。

3)生成报告的开销,主要包括索引、重组、排序和结果显示的开销。

4)主存储空间的开销,包括程序和数据所占的空间。对数据库设计者来说,一般可以对缓冲区进行适当的控制。

5)辅助存储空间的开销,辅助存储空间分为数据块和索引块,设计者可以控制索引块的大小。

实际上,数据库设计者只能对I/O和辅助存储空间进行有效的控制,其他方面都是有限的控制或根本不能控制。