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

Virtual Indexes

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

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,159)
  2. 浅谈MySQL索引背后的数据结构及算法 (累计阅读 11,447)
  3. 由浅入深理解索引的实现(2) (累计阅读 7,574)
  4. HBase二级索引与Join (累计阅读 6,904)
  5. 如何建立合适的索引? (累计阅读 6,697)
  6. mysql查询中利用索引的机制 (累计阅读 6,642)
  7. InnODB和MyISAM索引统计集合 (累计阅读 6,118)
  8. Innodb 表和索引结构 (累计阅读 6,090)
  9. MySQL索引背后的数据结构及算法原理 (累计阅读 5,666)
  10. mysql索引浅析 (累计阅读 5,225)