什么SQL查询向我显示Informix上的视图使用的表和索引?

eet 发布于 2018-05-24 informix 最后更新 2018-05-24 12:55 127 浏览

什么SQL查询向我显示表格& Informix上的视图使用的索引? 我知道如何为SYS_VIEWS中的视图找到“原始创建语句”,但这需要人类大脑扫描/选择该选择。我相信我可以找到表格是否被索引,一旦它们被识别出来。 背景:我需要确保一些重要的观点指向当前(例如在“重组”之后)表格。我经常看到指向旧备份表的视图,这些旧备份表不再被索引,并且一直持续查询。 我需要定期识别这些查询,并“提醒”调优DBA重建视图/索引。

已邀请:

gnihil

赞同来自:

sysdepend文档视图依赖关系。这些列是:

  • btabid - 基本表ID号
  • btype - 通常为表格或V视图
  • 依赖于dtabid的表ID号
  • dtype - 通常用于表格或V视图
  • 因此,对于具有tabid的给定视图,您可以编写:
    SELECT b.owner, b.tabname, d.*
        FROM "informix".systables b, "informix".sysdepend d
        WHERE d.dtabid = N
          AND d.btabid = b.tabid;
    
    如果你只知道视图名称,那么如果你的数据库是一个MODE ANSI数据库,那么你可能有多个具有相同表名(或视图名称)的表,但每个表都拥有不同的所有者,那么确定视图的tabid是非常棘手的。但是,在通常情况下(非ANSI数据库或独特的表格/视图名称),查询非常简单:
    SELECT b.owner, b.tabname, d.*
        FROM "informix".systables b, "informix".sysdepend d
        WHERE d.dtabid = (SELECT v.tabid FROM "informix".systables v
                             WHERE v.tabname = "viewname"
                         )
          AND d.btabid = b.tabid;
    
    这个问题询问了一个视图使用的索引。索引本身不被视图使用;查询引擎在处理查询时使用索引,但所使用的索引可能会根据总查询而改变 - 因此可能会对这两个查询使用不同的索引:
    SELECT * FROM SomeView;
    SELECT * FROM SomeView
        WHERE Column1 BETWEEN 12 AND 314;
    
    将使用的索引不记录在系统目录中的任何位置;当准备好陈述时,它们会被动态重新确定。 该问题还指出:
    Background: I need to make certain that some critical views point to current (e.g. after being "reorganized") tables. Too often I have seen views pointing to old backup tables, that were no longer indexed, and took forever to query.
    你如何进行重组?你是否创建了一个具有所需结构的新表,将数据从旧数据复制到新数据,然后重命名旧数据,重新命名新数据?这可能是解释 - 表重命名重新引用表的视图。你在做什么形式的重组?你可以使用不同的技术?经典的备用方法是使用ALTER INDEX indexname TO CLUSTER(在将其更改为NOT CLUSTER之后,如果它已被群集)。这将重建表和索引 - 不会打破视图。或者,您可以考虑使用ALTER FRAGMENT操作。 保留旧桌子也似乎有点奇怪。这表明你的重组更多是丢弃旧数据的问题。也许你应该按日期范围对你的表进行分段,这样你就可以在分段达到“使用寿命结束日期”时分离一个分段。删除表格还会放弃依赖于它的视图,确保使用新表格名称重建视图。 因此,另一种选择是简单地确保重组下降并重新创建观点。
    I need to identify these queries regularly and "remind" the tuning DBA to rebuild the views/indexes.
    令人担忧...它应该只是完成重组标准程序的一部分。基本上,您在该过程中有错误报告 - 它不能确保视图完全可操作。