文档详情

优化- 构高性能的InterBase_FireBird系统.doc

发布:2017-06-15约1.95万字共10页下载文档
文本预览下载声明
构架高性能的InterBase/FireBird系统 日期:2007-04-23 | 分类: HYPERLINK /c1416832/ 数据库 HYPERLINK /licenses/by/3.0/deed.zh \t _blank 版权声明:转载时请以超链接形式标明文章原始出处和作者信息及 HYPERLINK /logshtml \t _blank 本声明 HYPERLINK /logs/5120028.html /logs/5120028.html 有以下几个诀窍: 1、业务主键和数据库物理主键分离 在抽象系统业务模型时,我们都习惯于根据业务的情况定义出一个表的唯一不重复的关键字(主键)。然而,更好的做法,是不论具体业务如何,把所有的表的主键都定义成Generator支持下的自增长整数,作为记录编号(命名为xxx_key),把“业务主键”定义为不可重复的索引(甚至于根本不用定义,如果没有特殊的检索要求的话)。在这种主键设计策略中,隐含着一个很深的道理,那就是“将业务逻辑和物理逻辑脱离开”的原则,实体的业务逻辑并不直接运用到真实的物理逻辑实现上。以单据表作为一个典型的例子,单据往往具备着一个不可重复的“单据编号”,一般它的数据类型是一个几十字节的字符串,它相当于是“单据”这个实体在业务逻辑上体现出来的主键。而在这里的规范中,却并不以这个字符串编号为真正物理上的主键,而是采用一个自增长的KEY取代它成为真正的物理上的主键。以此为基础,表与表之间的关联也同样以一个单独整数字段进行关联,这个字段对于主表,一般就是主表的主键字段。在外键的创建中,一般也尽量避免多字段关联的联合外键。在FireBird数据库中,这种设计方式利用了FireBird特有的生成器(Generator)机制来实现。在创建外键时,一般都将外键的cascade delete打开,利用数据库的级联删除功能达到了自动删除从表记录。 2、#61548; 索引的建立 要为可能频繁发生的检索的条件组合建立相应的索引。如果定义了主从表的外键关联,那么系统会自动创建所需的索引。但针对不同的数据类型,索引的执行效率也是不同的。对于复杂的查询,可以通过plan子句告诉服务器采用怎样的索引进行数据检索,格式如下: Select语句 ? PLAN( ? ? 表名1? INDEX(索引名称), ? ? 表名2? INDEX(索引名称) ? ? ) 3、 自增长字段的建立 建立表的时候,在IBExpert中通过打开字段的AutoInc属性设定某字段是自增长字段后,同时建立相应的生成器和触发器;通过调用SQL语句来得到服务器端生成器的值并使之加1: Select gen_id(AGenerator,1) as id from rdb$database用一个ibquery控件来执行该语句产生永不重复整数序列。 一般情况下,一个表对应着一个生成器。但是在某些情况下,可能多个表共用一个生成器,也可能一个表用多个生成器 4、应尽量避免字符串字段作为关联查询的关联条件。 5、应尽量避免多重字段、字符串字段(特别是常字符串)作为主键、关联查询的关联字段 6、在系统构架方面应该采取划分业务数据生存期的方式,在系统中采用动态创建数据库的机制,使不同的业务区间对应一个单独的数据库文件,比如说,一个会计核算年对应一个GDB文件,到年底核算时,为下年创建一个新的数据库,新数据库中的常量数据从老数据库中继承过来,而动态的业务数据从0开始。划分动态数据库分区的原则就是,把每个数据库文件大约控制在600M左右(更大些也可以,但不太利于备份刻录到光盘上) ? 看了你的经验收益良多. 你在里边提到: 在SQL语句不是很多的情况下,应避免在代码中书写动态SQL语句,特别是对于把数据显示界面相关联的Select语句更不推荐使用动态SQL,而是要将不同的语句放在不同的Query元件中,而且将查询控件的字段实体化 ==================================================== 这样的话只要用良用到条件查询,就要切换DataSource相关的数据集组件,而且代码中也要用DataSource.DataSet的方式引用数据集来进行同步数据集操作. TIME: 2006-12-2 14:05:31 ? IP: Protected .NET时代的win32英雄 广泛的使用自增长整数作为主键,是不是会在大批量数据的导入时遇到很大的麻烦? 如果两表关联还是用的业务主键相关联 那么逻辑主键似乎没有存在的必要 逻辑主键存在的必要就是提供检索 ============================================== 两表用逻辑主键相关联 这样的确很大程度的
显示全部
相似文档