我有一个包含 800 万行的事实表,每月增加 100 万行。该表已包含其上的索引。IBM Cognos 环境使用该表来生成报告。目前我正在寻找优化表 SELECT 语句的方法。
作为第一次尝试,我对表进行了分区(每个分区具有相同的行分布)并且查询适用于分区,但由于某种原因,我得到了相同甚至更差的性能,这很奇怪。每个查询只影响一个分区。有人可以解释如何优化吗?
我想到的第二个想法是将事实表实现为索引组织表,但它必须将所有列作为主键。这可以吗?会有性能提升吗?
第三个想法是以包含从星型模式连接的所有列的方式实现事实表。会有性能提升吗?
编辑:这是执行计划:
在创建包含分区标准的索引之后,我设法将事实表 FT_COSTS 的访问时间减少了 3 倍(成本为 42000,现在为 14900),但在此之前,我得到的结果比未分区表更差。我用这个链接来解决我的分区问题Range partition skip check
从我现在看到的情况来看,主要瓶颈是 GROUP BY ,它将成本从 34000 提高到 85 000 ,增加了一倍以上。有没有人对此有解决方法的想法?