IT技术博客大学习 共学习 共进步

Virtual Indexes

玉面飞龙的BLOG 2010-04-12 09:21:01 浏览 3,161 次

Oracle11g 中有个invisiable index的新功能,它的前身或许就是virtual index (虚拟索引)。

在建新索引的时候,Virtual Index和invisiable index都可以用来确保其他SQL的执行计划不会改变。特别是当表上索引结构比较复杂,为了优化某个SQL而新建的索引可能会导致其它SQL执行计划变糟糕。

CREATE INDEX INDEX_NAME
ON TABLE_NAME (INDEX_COLUMN)
NOSEGMENT;

建立虚拟索引后,可以使用dbms_stats.generate_stats收集该虚拟索引的统计信息,以便更好的帮助CBO判断。

SQL> select OBJ#,DATAOBJ#,BLEVEL,LEAFCNT,DISTKEY,LBLKKEY,DBLKKEY,CLUFAC,ROWCNT from ind$ where obj#=57598;

OBJ#   DATAOBJ#     BLEVEL    LEAFCNT    DISTKEY    LBLKKEY    DBLKKEY     CLUFAC     ROWCNT
―――- ―――- ―――- ―――- ―――- ―――- ―――- ―――- ―――-
57598      57598          1        272      17389          1          2      47175     100000

dbms_stats.gather_index_stats无法分析virtual index。

建议继续学习

  1. 由浅入深探究mysql索引结构原理、性能分析与优化 (阅读 16,123)
  2. 浅谈MySQL索引背后的数据结构及算法 (阅读 11,384)
  3. 由浅入深理解索引的实现(2) (阅读 7,524)
  4. HBase二级索引与Join (阅读 6,862)
  5. 如何建立合适的索引? (阅读 6,664)
  6. mysql查询中利用索引的机制 (阅读 6,584)
  7. InnODB和MyISAM索引统计集合 (阅读 6,084)
  8. Innodb 表和索引结构 (阅读 6,041)
  9. MySQL索引背后的数据结构及算法原理 (阅读 5,622)
  10. mysql索引浅析 (阅读 5,184)