还剩1页未读,继续阅读
文本内容:
Informix数据库开发人员指导原则Version
1.
11、目的1.为提高数据库server运行稳定性和性能、加强数据库安全管理、提高查询和交易效率,特为开发人员制定下列指导原则
2、指导原则A建库方面在创建数据库时,不能创建在rootdbs上(缺省情况),需要指定dbspace,即创建在datadbs上createdatabasedbnameindbspacename建立数据库应该使用en_us.819字符集使用缺省DB_LOCALE或设置DB_LOCALE=en_us.819如果有两个或两个以上的datadbs,则要考虑创建在哪个datadbs上原则是使每个datadbs上的数据大小尽量相近,以缩短数据库备份时间B表的使用方面对于新建的每个表,都需要把public用户的权限去除为此创建每个新表的sql语句后,需要添加如下语句revokeallontablenamefrompublic;每个数据库中的表尽量由同一个用户来创建,这样对于以后权限的控制比较方便对于很大的表,可以考虑使用分区表parition技术,即把表分布在多个datadbs上,这样可以提高数据的查询速度建立大表的特殊处理对于大的表,例如记录数达到百万行以上的表,或者是随时间而增大的记录log的表,应该设置大的表firstextent,nextextent可以设为前者的1/10extent以page2K为单位如createtableuser.tabnamecol1varchar80notnullcol2varchar20extentsize100000nextsize10000lockmodepage;这里的extentsize100000指的就是初始extent大小为200M;nextsize10000指的就是后续增量extent大小20M临时表的用法在使用临时表时一定要加withnolog,包括createtemptable和selectintotemp两种方式,这些能提高临时表处理的效率,以及减少逻辑日志的使用量C关于数据清理和装载时的注意事项在一个带日志的数据库中进行大数据量的删除时,尽量不要直接delete应该将所需要保留的数据先卸载unload出来,然后先删除drop表,再重新创建表并重新装载load数据,否则容易产生长事务及锁资源溢出的问题在一个带日志的数据库中进行大数据量的装载时,如果条件许可,可将数据库日志改为不带日志,装载完数据后再将数据库日志重新改为带日志模式或者在
7.31版本以后,可以先将表创建为rawtable,在装载完数据后将表改为standard模式altertabletablenamestandard,由于rawtable不支持索引,所有索引包括主键需在数据装载完毕并改为standard模式后再创建如果一定要在带日志的情况下装载数据,建议将需要装载的文件切成记录数较少的多个文件,或者使用dbload工具装载,在装载完一定记录后先提交,再继续装载,以防产生长事务在进行过数据删除或装载后一定要对表重新进行一次统计更新,以保持系统表信息和实际表信息的同步D统计更新(updatestatistics)对经常需要查询修改的表定期进行统计更新,是数据库保持高性能的重要条件对于那些记录数增长比较快的表也应该定期做低度low的统计更新如果还需要得到更好的查询性能,可对一些表的经常查询用到的索引字段进行高级的统计更新,语法如下updatestatisticshighfortabletablenamecol1col2…;需要注意的是不要对整表做高级统计更新,速度会非常慢ESQL执行计划和setexplainon的使用不同的sql有可能运行的开销会大不相同,为此,informix提供了setexplain的工具供开发人员和数据库管理人员分析一个sql语句的估计开销和查询计划语法为在dbaccess内,SQL语句执行添加1行setexplainon;9版本以前或者setexplainonavoid_execute;9版本以后,informix会在当前目录下生成一个sqexplain.out的文件文件中的Estimatedcost为informix查询计划的预估开销,越小越好对于缺少经验的应用开发人员,可以先多使用这个工具,以获得不同sql语句之间效率高低的相关知识,从而对以后的编程积累知识当然,有些时候,数据库会制定出一个错误的查询计划,这在早期版本中比较常见,特别是在表上又多个索引时,有可能会选用一个不适当的索引,导致开销大大增大另外,经常定期的执行统计更新,也会影响数据库制定查询计划的准确性F锁和脏读对于经常需要访问修改的表,建议将其锁粒度设置为记录级锁,以减少锁冲突的概率,但是在做一些批量操作时,如果表的锁模式为记录级锁的话,会大大降低批量的性能,建议如果条件许可的话,在执行此类批量操作时,先对整表上排他锁(locktableinexclusivemode),会大大提高此类批量的性能;另外,建议所有的查询都设置隔离级别为脏读(setisolationtodirtyread),这样不会产生因为所查询记录被锁而导致的查询失败对于经常需要访问修改的表,建议将其锁粒度设置为记录级锁,以减少锁冲突的概率,但是在做一些批量操作时,如果表的锁模式为记录级锁的话,会大大降低批量的性能,建议如果条件许可的话,在执行此类批量操作时,先对整表上排他锁(locktableinexclusivemode),会大大提高此类批量的性能;另外,建议所有的查询都设置隔离级别为脏读(setisolationtodirtyread),这样不会产生因为所查询记录被锁而导致的查询失败GSql编程的一些注意事项对于经常访问的表中字段,建议对其建立索引并尽量多用索引查询,防止对大表的seqscan(全表扫描)尽量多用join连接,少用子查询使用join时join字段上必须有索引使用matches,like时一定要从字段的第一位开始匹配,否则不会用到索引在查询条件中如果对字段使用函数,如trim等,不会使用索引。