数据库设计系列11--选择文件组织方式和索引

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

lili00okok
相关文章
|
2月前
|
数据库 索引
深入探索数据库索引技术:回表与索引下推解析
【10月更文挑战第15天】在数据库查询优化的领域中,回表和索引下推是两个核心概念,它们对于提高查询性能至关重要。本文将详细解释这两个术语,并探讨它们在数据库操作中的作用和影响。
60 3
|
2月前
|
数据库 索引
深入理解数据库索引技术:回表与索引下推详解
【10月更文挑战第23天】 在数据库查询性能优化中,索引的使用是提升查询效率的关键。然而,并非所有的索引都能直接加速查询。本文将深入探讨两个重要的数据库索引技术:回表和索引下推,解释它们的概念、工作原理以及对性能的影响。
85 3
|
26天前
|
关系型数据库 MySQL 数据库
数据库数据恢复—MYSQL数据库文件损坏的数据恢复案例
mysql数据库文件ibdata1、MYI、MYD损坏。 故障表现:1、数据库无法进行查询等操作;2、使用mysqlcheck和myisamchk无法修复数据库。
|
30天前
|
存储 缓存 数据库
数据库索引采用B+树不采用B树的原因?
B+树优化了数据存储和查询效率,数据仅存于叶子节点,便于区间查询和遍历,磁盘读写成本低,查询效率稳定,特别适合数据库索引及范围查询。
39 6
|
30天前
|
SQL 关系型数据库 MySQL
MySQL导入.sql文件后数据库乱码问题
本文分析了导入.sql文件后数据库备注出现乱码的原因,包括字符集不匹配、备注内容编码问题及MySQL版本或配置问题,并提供了详细的解决步骤,如检查和统一字符集设置、修改客户端连接方式、检查MySQL配置等,确保导入过程顺利。
|
2月前
|
Oracle 关系型数据库 数据库
Oracle数据恢复—Oracle数据库文件有坏快损坏的数据恢复案例
一台Oracle数据库打开报错,报错信息: “system01.dbf需要更多的恢复来保持一致性,数据库无法打开”。管理员联系我们数据恢复中心寻求帮助,并提供了Oracle_Home目录的所有文件。用户方要求恢复zxfg用户下的数据。 由于数据库没有备份,无法通过备份去恢复数据库。
|
2月前
|
存储 缓存 数据库
数据库索引采用B+树不采用B树的原因
B+树相较于B树,在数据存储、磁盘读写、查询效率及范围查询方面更具优势。数据仅存于叶子节点,便于高效遍历和区间查询;内部节点不含数据,提高缓存命中率;查询路径固定,效率稳定;特别适合数据库索引使用。
33 1
|
2月前
|
数据库 索引
数据库索引
数据库索引 1、索引:建立在表一列或多列的辅助对象,目的是加快访问表的数据。 2、索引的优点: (1)、创建唯一性索引,可以确保数据的唯一性; (2)、大大加快数据检索速度; (3)、加速表与表之间的连接; (4)、在查询过程中,使用优化隐藏器,提高系统性能。 3、索引的缺点: (1)、创建和维护索引需要耗费时间,随数据量增加而增加; (2)、索引占用物理空间; (3)、对表的数据进行增删改时,索引需要动态维护,降低了数据的维护速度。
40 2
|
2月前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
350 1
|
3月前
|
存储 关系型数据库 MySQL
PACS系统 中 dicom 文件在mysql 8.0 数据库中的 存储和读取(pydicom 库使用)
PACS系统 中 dicom 文件在mysql 8.0 数据库中的 存储和读取(pydicom 库使用)
47 2