什么SQL查询向我显示表&由Informix上的视图使用的索引?什么SQL查询向我显示Informix上的视图使用的表和索引?
我知道如何找到SYS_VIEWS中视图的“原始创建语句”,但这需要人类大脑扫描/选择该选择。我相信我可以找到表格是否被索引,一旦它们被识别出来。
背景:我需要确定一些重要的观点指向当前(例如在“重组”之后)表格。我经常看到指向旧备份表的视图,这些旧备份表不再被索引,并且一直持续查询。
我需要定期识别这些查询并“提醒”调优DBA重建视图/索引。
什么SQL查询向我显示表&由Informix上的视图使用的索引?什么SQL查询向我显示Informix上的视图使用的表和索引?
我知道如何找到SYS_VIEWS中视图的“原始创建语句”,但这需要人类大脑扫描/选择该选择。我相信我可以找到表格是否被索引,一旦它们被识别出来。
背景:我需要确定一些重要的观点指向当前(例如在“重组”之后)表格。我经常看到指向旧备份表的视图,这些旧备份表不再被索引,并且一直持续查询。
我需要定期识别这些查询并“提醒”调优DBA重建视图/索引。
表sysdepend
文档视图依赖关系。的列有:
因此,对于tabid N A给定的视图,你可以这样写:
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;
将要使用的索引不记录在系统目录中的任何地方;当准备好陈述时,它们会被动态重新确定。
问题还注意到:
背景:我需要的表(即“重组”后,如)作出肯定的是,一些批评意见指出电流。我经常看到指向旧备份表的视图,这些旧备份表不再被索引,并且一直持续查询。
您如何进行重组?你是否创建了一个具有所需结构的新表,将数据从旧数据复制到新数据,然后重命名旧数据,重新命名新数据?这可能是解释 - 表重命名重新引用表的视图。你在做什么形式的重组?你可以使用不同的技术?经典的待机是使用ALTER INDEX indexname TO CLUSTER(在将其更改为NOT CLUSTER之后,如果它已经被群集)。这将重建表和索引 - 不会打破视图。或者,您可以考虑使用ALTER FRAGMENT操作。
保留旧表格也有点奇怪。这表明你的重组更多是丢弃旧数据的问题。也许你应该按日期范围对你的表进行分段,这样你就可以在分段达到“使用寿命结束日期”时分离一个分段。删除表格也会放弃依赖它的视图,确保使用新表格名称重建视图。
因此,另一种替代方法是简单地确保重组删除并重新创建视图。
我需要定期确定这些查询和“提醒”调谐DBA重建的意见/索引。
令人担忧......它应该只是完成重组的标准程序的一部分。基本上,您在该过程中有错误报告 - 它不能确保视图完全可操作。
问题:你如何进行重组?这是他的数据库,毕竟 感谢您的答案。我希望我能从这里管理。 –
lexu
2008-11-22 09:46:36
答案:我不做reorg,它是由上帝(DBA)完成的,不需要关心用户添加的视图。