在数据库中有一个表, 在其上面有一个索引, 现在的情况是没有分析数据的. 如下所示:

SQL> SELECT TABLE_NAME, NUM_ROWS, LAST_ANALYZED
  2    FROM USER_TABLES WHERE TABLE_NAME=’POS_SELL’;

TABLE_NAME                       NUM_ROWS LAST_ANAL
—————————— ———- ———
POS_SELL

SQL> SELECT INDEX_NAME, NUM_ROWS, LAST_ANALYZED
  2    FROM USER_INDEXES WHERE INDEX_NAME=’POS_SELL_IX1′;

INDEX_NAME                       NUM_ROWS LAST_ANAL
—————————— ———- ———
POS_SELL_IX1

    接着需要再创建一个索引, 在创建时, 我加上了计算统计信息的选项, 如下所示:

SQL> CREATE INDEX POS_SELL_IX2 ON POS_SELL (USERCODE)
  2    COMPUTE STATISTICS;

Index created.

    现在我们再来查一下, 表及索引的分析情况, 发现在10g中, 只有新创建的索引有统计数据:

SQL> SELECT TABLE_NAME, NUM_ROWS, LAST_ANALYZED
  2    FROM USER_TABLES WHERE TABLE_NAME=’POS_SELL’;

TABLE_NAME                       NUM_ROWS LAST_ANAL
—————————— ———- ———
POS_SELL

SQL> SELECT INDEX_NAME, NUM_ROWS, LAST_ANALYZED
  2      FROM USER_INDEXES WHERE INDEX_NAME=’POS_SELL_IX1′;

INDEX_NAME                       NUM_ROWS LAST_ANAL
—————————— ———- ———
POS_SELL_IX1

SQL> SELECT INDEX_NAME, NUM_ROWS, LAST_ANALYZED
  2      FROM USER_INDEXES WHERE INDEX_NAME=’POS_SELL_IX2′;

INDEX_NAME                       NUM_ROWS LAST_ANAL
—————————— ———- ———
POS_SELL_IX2                        24398 14-MAY-07

    但今天在9i中创建索引时, 发现表被分析了, 但另一个索引则没有分析. 由于表的统计信息变了, 引起了一些SQL选择了错误的执行计划, 导致了服务器的性能问题.