电信运营商Db2db2建表

临时表的创建和维护?

在做复杂业务分析时,一个存储过程也会用到很多临时表(存储业务分析某一步的中间结果),这些表的数据经常变化(每个周期都会被清空再装入),还需要和别的表做关联,那么这种表在建表的时候有什么要注意的吗?为了提升程序性能,优化时考虑这些表吗?要建立索引吗?runstats应该保持在什么状态?需要reorg吗?

参与14

2同行回答

leilinleilin数据库管理员IBM
我理解,你说的这些临时表不是会话表(DGTT 或 CGTT)吧?如果每次调用存储过程生成的临时表数据变化都比较大,建议在存储过程中搜集统计信息(调用sysproc.admin_cmd('runstats on table <临时表>'),因为临时表每次调用一般都清空,没有必要reorg;建不建索引,具体看表关联的需要,存...显示全部

我理解,你说的这些临时表不是会话表(DGTT 或 CGTT)吧?如果每次调用存储过程生成的临时表数据变化都比较大,建议在存储过程中搜集统计信息(调用sysproc.admin_cmd('runstats on table <临时表>'),因为临时表每次调用一般都清空,没有必要reorg;建不建索引,具体看表关联的需要,存储过程一般是加工数据的,临时表一般不需要建索引。另外,建议将存储过程对应的package绑定成 REOPT ALWAYS的,这样每次调用该存储过程都会根据最新的统计信息生成新的执行计划,通常也会提高性能。

收起
IT其它 · 2017-08-17
浏览1764
topzgmtopzgm课题专家组软件架构设计师People's Bank of China
根据个人实践经验,分享如下2点:1)如果是DGTT(DECLARE GLOBAL TEMPORARY TABLE)/CGTT(CREATE GLOBAL TEMPORARY TABLE),则一般不必对其建立index,也不需对其进行runstats、reorg,因为DB2查询优化器在每次分析和执行SQL时,都会对包含DGTT/CGTT的SQL进行重新优化并且生成新的最优a...显示全部

根据个人实践经验,分享如下2点:
1)如果是DGTT(DECLARE GLOBAL TEMPORARY TABLE)/CGTT(CREATE GLOBAL TEMPORARY TABLE),则一般不必对其建立index,也不需对其进行runstats、reorg,因为DB2查询优化器在每次分析和执行SQL时,都会对包含DGTT/CGTT的SQL进行重新优化并且生成新的最优access plan。
2)如果不是DGTT/CGTT,而是自己create table x1的普通表,即使这些普通表经常变化,只要建立index、runstats、reorg带来的收益远远大于建立index、runstats、reorg耗费的成本,就应该建立index、runstats、reorg,否则不必。复杂业务分析的存储过程,更加需要遵从这个“收益与成本原则”。例如,一个复杂分析,不建立index/runstats/reorg时查询需要5分钟时间;但是如果建立index/runstats/reorg需要耗时3秒种时间,而此时查询提高到只需10秒时间;这样的3秒种的成本,带来了查询时间减少4分50秒的收益,这样的成本与收益是有利的。

收起
银行 · 2017-08-18
浏览1668

提问者

星星峡的风
技术支持工程师福建新大陆软件有限公司
擅长领域: 数据库系统运维服务器

问题来自

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2017-08-17
  • 关注会员:3 人
  • 问题浏览:4307
  • 最近回答:2017-08-18
  • X社区推广