Chinaunix首页 | 论坛 | 博客
  • 博客访问: 101924013
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-14 19:36:03

  来源:赛迪网    作者:huawuque

正如您可以看到的,上面用于索引 NAME_IND 的 UPDATE 语句失败了,因为 FULLKEYCARD 大于表的基数(CARD)。正如通过

db2look.out 文件中的下列更新语句可以看到的,CARD 是 35:

UPDATE SYSSTAT.TABLES 
SET CARD=35, 
NPAGES=1, 
FPAGES=1, 
OVERFLOW=0, 
ACTIVE_BLOCKS=0 
WHERE TABNAME = ’STAFF’ AND TABSCHEMA = ’SKAPOOR ’;

现在,再次以解释模式运行相同的查询:

db2 "select name from staff where id=10 order by name"

并生成访问计划。您将看到它是不同的:

Access Plan: 
----------- 
Total Cost: 12.972 
Query Degree: 1 
Rows 
RETURN 
( 1) 
Cost 
I/O 
| 
1 
TBSCAN 
( 2) 
12.972 
1 
| 
1 
SORT 
( 3) 
12.9708 
1 
| 
1 
TBSCAN 
( 4) 
12.9682 
1 
| 
35 
TABLE: SKAPOOR 
STAFF

该示例显示,如果在表上发生 WRITE 活动时运行 RUNSTATS,统计数据就可能与本示例中的不一致。因此,用于更新统计数据的 UPDATE

语句可能失败并产生 SQL1227N 错误消息。所有的 UPDATE 语句都运行成功十分重要,如果存在不一致性,就应该进行修理并重新运行。本例中,解决方案是将

KEYCARDS 和 NUMRIDS 从 37 重新修改为 35。

阅读(376) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~