《2022年DB2编程序技巧 (六)DB2教程.docx》由会员分享,可在线阅读,更多相关《2022年DB2编程序技巧 (六)DB2教程.docx(4页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、2022年DB2编程序技巧 (六)DB2教程2.2 SQL语句尽量写困难SQL尽量运用大的困难的SQL语句,将多而简洁的语句组合成大的SQL语句对性能会有所改善。DB2的SQLEngieer对困难语句的优化实力比较强,基本上不用当心语句的性能问题。Oracle则相反,举荐将困难的语句简洁化,SQLEngieer的优化实力不是特殊好。这是因为每一个SQL语句都会有resetSQLCODE和SQLSTATE等各种操作,会对数据库性能有所消耗。一个总的思想就是尽量削减SQL语句的个数。2.3 SQLSP及CSP的选择首先,C的sp的性能比sql的sp的要高。一般而言,SQL语句比较困难,而逻辑比较简
2、洁,sqlsp与csp的性能差异会比较小,这样从工作量考虑,用SQL写比较好。而假如逻辑比较困难,SQL比较简洁,用c写比较好。2.4 查询的优化(HASH及RR_TO_RS)db2set DB2_HASH_JOIN=Y (HASH排序优化)指定排序时运用HASH排序,这样db2在表join时,先对各表做hash排序,再join,这样可以大大提高性能。剧沈刚说做试验,7个一千万条记录表的做join取10000条记录,再没有索引的状况下72秒。db2set DB2_RR_TO_RS=Y该设置后,不能定义RR隔离级别,假如定义RR,db2也会自动降为RS.这样,db2不用管理Nextkey,可以少
3、管理一些东西,这样可以提高性能。2.5 避开运用count(*)及exists的方法1、首先要避开运用count(*)操作,因为count(*)基本上要对表做全部扫描一遍,假如运用许多会导致很慢。2、exists比count(*)要快,但总的来说也会对表做扫描,它只是遇到第一条符合的记录就停下来。假如做这两中操作的目的是为selectinto服务的话,就可以省略掉这两步。干脆运用selectinto选择记录中的字段。假如是没有记录选择到的话,db2会将sqlcode=100和sqlstate=20000假如是有多条记录的话,db2会产生一个错误。程序可以创建continuehandlerfor
4、exceptioncontinuehandlerfornotfound来检测。这是最快速的方法。3、假如是推断是不是一条,可以运用游标来计算,用一个计数器,累加,达到预定值后就离开。这个速度也比count(*)要快,因为它只要扫描到预定值就不再扫描了,不用做全表的scan,不过它写起来比较麻烦。3 DB2表及sp管理3.1 看存储过程文本selecttextfromsyscat.procedureswhereprocname=PROC1;3.2 看表结构describetablesyscat.proceduresdescribeselect*fromsyscat.procedures3.3 查看各表对sp的影响(被哪些sp运用)selectPROCNAMEfromSYSCAT.PROCEDURESwhereSPECIFICNAMEin(selectdnamefromsysibm.sysdependencieswherebnamein(selectPKGNAMEfromsyscat.packagedepwherebname=TB_BRANCH)