文档介绍:OracleRDBMS大型应用优化其他方法麦思博(北京):应用中的有的数据只是临时的存储,使用后不再使用;永久表要存放在表中,给磁盘空间带来碎片;临时比变量更有效,可以用SQL语句。Oracle允许在会话或事务其间创建临时表,以保存会话或事务的数据:临时表就是内存表,它不保存到表空间上;临时表的数据仅在会话其间有效;用CREATEGLOBALTEMPORARY完成临表的创建;创建临时表可指定事务级后会话级有效;不专门指定,则在会话结束后才释放;对临时表做DML操作不产生重做日志(REDOLOG)。Date3Oracle临时表-语法createglobaltemporarytabletable_name[tabledefinition]mitdeleterows;在提交后删除行数据:临时表可在提交后删除,语法为:为会话保持数据:临时表可为会话保持数据,语法为:createglobaltemporarytabletable_name[tabledefinition]mitpreserverows;Date4Oracle临时表-例子SQL>createglobaltemporarytablemyempasselect*fromemp;表已创建。  SQL>select*frommyemp;未选定行 SQL>insertintomyempvalues('赵元杰',,10,'12');已创建1行。 SQL>select*frommyemp;ENAMESALDEPTNOTEL------------------------------------------------------- SQL>connectsys/sys已连接。SQL>connectzhao/zhao已连接。SQL>select*frommyemp;未选定行创建临时表:带GLOBALTEMPORARY创建;会话结束自动清除:Date5内容提要临时表的使用方法Logging与Nologging适当使用关于热块问题索引统计数据陈旧问题多块读方法索引与相关参数会话级参数使用方法Date6Logging&Nologging什么是redo当块改变时,Oracle记录改变向量,并发将这些存放SGA日志缓冲区由LGWR写到日志文件中简单说:Redo=TransactionsDate7Logging&Nologging何时设置为NOLOGGING下面情况可将表设置为NOLOGGINGDIRECTLOAD(SQL*Loader)DIRECTLOADINSERT(usingAPPENDhint)CREATETABLE...ASSELECTCREATEINDEXALTERTABLEMOVEALTERTABLE...MOVEPARTITIONALTERTABLE...SPLITPARTITIONALTERTABLE…ADDPARTITION(ifHASHpartition)Date8Logging&Nologging下面情况可将表设置为NOLOGGINGALTERTABLE…MERGEPARTITIONALTERTABLE…MODIFYPARTITIONADDSUBPARTITONCOALESCESUBPARTITONREBUILDUNUSABLEINDEXESALTERINDEX...SPLITPARTITIONALTERINDEX...REBUILDALTERINDEX...REBUILDPARTITIONDate9Logging&Nologging设置索引为NOLOGGING可加快处理速度ALTERTABLE…NOLOGGING;INSERT/*+nologging*/…下面情况可采用NOLOGGING--先设置为NOLOGGINGSQL>ALTERINDEXnew_indexNOLOGGING;SQL>ALTERINDEXnew_indexREBUILD;--当暂时将表或索引设置成NOLOGGING时,别忘了再将它们设置loggingselect'altertable'||table_name||'logging;'fromuser_tableswheretable_namelike'%STATS%';select'alterindex'||index_name||'logging;'fromuser_indexes;Date10