在上一步骤中,我们说明了如何将逻辑数据库设计转换为一组基本表,如果需要的话还要转换业务规则,但是即使是最简单的数据库,为了获得合适的性能也必须进行额外的考虑。要着手物理数据库设计,就必须理解目标DBMS的工作,尤其是文件组织方式、索引和她所支持的查询处理技术。本步骤的目的是确定最佳文件组织方式来存储基本表以及实现所要求性能的索引。文件组织方式是指当文件存储在磁盘上时,记录在文件中的排列方式。索引是一种数据结构,它允许DBMS在文件中更快地定位某些记录,并且因此提高对用户查询的响应。可以使用什么样的文件组织方式依赖于目标DBMS,有些系统比其他系统提供了更多的文件组织方式,完全了解可用的结构,并且知道目标DBMS怎样使用这些结构是很重要的。只有了解必须要支持的事务的细节,才能做出有意义的物理设计抉择。在分析事务时,要标示出性能标准。例如:经常运行的事务和对性能产生重大影响的事务,业务操作的关键事务,当对数据有很高的要求时,每日/每周内访问数据的次数。我们的步骤可以分为以下的三个步骤:
1. 分析事务,目标是理解运行在数据库上的事务的功能并分析重要的事务。要进行有效的物理数据库设计,就必须要很好的理解运行在数据库中的事务。在许多情况下,分析所有预期的事务时极为费时的,因此应该至少研究最重要的那些事务,建议用户查询的最活跃的20%占总的访问的80%,当进行分析时,会发现80/20原则是很有用的方针。为了帮助标示要研究的那些事务,可以使用事务应用图,他用图形的方式表明了那些表潜在的可能被使用多次,或者使用事务/表交叉的引用矩阵,他显示了每个事务访问的表,为了将目光集中在有问题的部分,一种处理方法是1)将所有的事务路径影射到表中,2)确定那些表经常被事务访问,3)分析选出的包涵了这些表的事务。将所有的事务影射到表中,需要根据最初的设计步骤,检查模型是否支持用户所需的事务。在考虑每个事务时,不仅要知道每小时运行的平均次数和最大次数,而且还应该知道事务运行的日期时间,包括最大负荷可能发生的时间。如果事务经常访问某些表,那么他们的操作模式就是非常重要的。如果这些事务以独立的方式进行操作,那么可能的系统性能问题会减少,但是如果操作模式有冲突,则应更仔细的检查事务来确定是否可以通过改变表的结构来改善性能,从而减少潜在的问题。在标示了重要的事务之后,现在应该开始更详细的分析每个事务,对每个事务应该确定1)该事务访问的表和列以及访问类型。2)在查询条件中使用的列,检查这些条件是否包括模式匹配,范围查找,准确匹配的键值检索。对于查询,包含在两个或更多的表的关联中的列,这些列也可能构成访问结构的候选。
2. 选择文件的组织方式,其目标是确定每个基本表的有效文件的组织方式。物理数据库设计的主要目标之一就是以有效的方式存储数据,例如如果想按姓名以字母顺序检索员工记录,则用员工姓名对文件排序就是很好的文件组织方式,但是如果想要检索所有工资在某个范围内的员工,则按照员工姓名排序的文件就不是好的文件组织方式。一些文件的组织方式对于成批处理数据经如数据库是很有效率的,换句话说,可能想使用有效的存储结构来建立数据库,然后通常的操作来改变它。因此如果目标DBMS允许,这步的目标是为每个表选择最佳的文件组织方式,在许多方面,可能发现关系DBMS基本不允许你选择文件组织方式,如果你的目标DBMS不允许选择文件的组织方式,这个步骤就可以省略。文件组织方式以及选择的原因应该全部存档。
3. 选择索引,目标是确定添加索引会改善系统的性能,为表选择正确的文件组织方式的一种方法是保持记录的无序性并且创建所需数目的二级索引,另一种方法是通过制定主键或者聚簇索引使表中的记录是有序的,这种情况下应该选择如下列莱排序或者聚簇索引记录。经常用于连接操作的列,因为这样使连接更有效率,在表中经常按某列的顺序访问记录的列。 如果排序的列是主键,那么该索引就是聚簇索引,每个文件只能有一个主索引或者是一个聚簇索引。除了有主索引,还有二级索引,二级索引提供了为基本表指定其他键的机制,可以用于更有效地检索数据,但是在保持和使用二级索引的同时还要考虑到当检索数据时,必须要平衡改善性能,考虑的内容包括,每当在表中插入一条记录时,都要给每个二级索引增减一个检索记录,当表中相应记录被更改时,也要更新二级索引,需要使用额外的磁盘空间来存储二级索引。确定需要什么样的二级索引的一种方法就是创建你认为是索引的候选列的意愿表,然后考虑维护每个这样的索引的影响,提供如下的方法帮助你创建意愿表,1.不必为小表创建索引,在内存中查询该表回避存储额外的索引结构更加有效,2.如果没有文件组织方式的键,则索引表的主键,3.为检索数据时大量使用的列增加二级索引,4.如果经常基于外键访问数据,则为该外键增加二级索引,5.为经常有如下情况的列添加二级索引,查询或者连接条件、orderby、group by、其他操作包括排序,6.为在内置函数包含的列增加二级索引,这样就可以仅仅使用索引就可以完成查询,被称为仅索引计划。7.为可以导致仅索引计划的列添加二级索引。8.避免为经常被更新的列或表设置索引。9.如果查询将检索表中记录的大部分25%以上,即使表再大也不创建索引,查询整个表要比使用索引查询更有效,10.避免为长字符串组成的列创建索引。如果维护所有的索引可能会减低重要的更新事务,那么就考虑从表中删除该索引,但是要注意,特殊的索引可能也会令更新操作又有效,仅仅限于查找方面。最后要将所有的索引的选择以及选择的原因存档。
本文转自凌辉博客51CTO博客,原文链接http://blog.51cto.com/tianli/59573如需转载请自行联系原作者
lili00okok