我在Oracle Applications(12c版本1)中运行Oracle Grid Control来分析运行缓慢的报告。它的建议是实现一个索引,但索引(assignment_action_id
上的pay_run_results
)是表中已有的另一个索引的子集(由assignment_action_id
,element_type_id
组成,{ {1}},source_type
)。
实施这个索引有什么意义吗?由于必须读取较少的索引块,它会使查询更快吗?
答案 0 :(得分:1)
这似乎是调谐器的一个奇怪的建议。如果您运行此缓慢的报告,那么维护额外索引的成本可能是值得的。
如果你想测试建议的索引是否能为查询提供更好的执行计划,但又不想投入时间和实际的构建,那么为什么不用虚拟测试呢?指数能力?这是一种向表中添加索引定义并查看生成的计划的外观的简洁方法。 Tim Hall在他的Oracle-Base网站上有很好的介绍。 Check it out
由于必须读取较少的索引块,它会使查询更快吗?
如果查询使用索引范围扫描或完全快速扫描,则可能是“是”。但在构建其他索引之前,您应该考虑压缩。给定一个复合索引,其中前导列的选择性最低(并且尾随列是最具选择性的),压缩可以使索引更小。使用四列索引,您可以使用compress 3
构建索引。
然而,有一些关于列命名约定的东西让我认为assignment_action_id
不是最不具有选择性的列,在这种情况下压缩根本没有帮助(并且可能使事情变得更糟)。