使索引无法使用后,索引不会扫描

时间:2016-10-15 06:31:58

标签: oracle indexing fetch sql-execution-plan

对于现有表,我添加了索引以检查性能。表有150万条记录。现有成本为“58645”。一旦创建了索引,成本就会降低到“365”。因此,我经常将索引视为“无法使用”。然后我改变并重建索引进行检查。对于昨天已知的索引正在oracle的解释计划中使用。但是今天当我无法使用索引并重建时,在解释计划中,索引扫描无法正常工作。但性能仍然比较老。我已经丢弃并再次创建。但问题仍然存在。提取速度很快。但解释计划显示该指数未被使用且成本显示为“58645”。我坚持这个。

2 个答案:

答案 0 :(得分:0)

很多时候,当您创建新索引或从头开始重建它时,它不会显示在解释计划中,有时也不会使用一段时间。要纠正解释计划,应在索引上收集统计数据。

应使用EXEC DBMS_STATS.GATHER_INDEX_STATS或使用带有级联选项的DBMS_STATS.GATHER_TABLE_STATS。

答案 1 :(得分:0)

数据块缓存在BUFFER_POOL中,这会影响您的结果:

  1. 运行查询;
  2. 更改索引;
  3. 运行查询; - 来自1的缓冲数据会使性能偏差
  4. 刷新缓冲池
  5. 运行查询 - 现在您可以更准确地衡量"快速"查询是。
  6. 你是否冲洗了缓冲区?

    ALTER SYSTEM FLUSH BUFFER_POOL;