索引与分区

paw*_*que 22 performance oracle

为什么仅使用索引无法实现性能改进,因此需要其他技术(如表分区)?问题只与性能有关,当然不同的分区可以放入不同的表空间,这具有索引无法实现的其他效果。

或者换句话说,只有在性能方面:是否可以通过索引实现与表分区相同的性能改进?

Bil*_*hor 20

不,分区允许将某些表扫描限制在特定分区。如果您将返回超过 2% 到 4% 的表数据,则索引往往毫无用处。如果您的选择标准允许将查询本地化到特定分区,则不需要扫描其他分区。

优化器可能会选择对某些分区使用表扫描,对其他分区使用索引。我还没有看到任何表明这种情况正在发生的解释计划。

如果您有大量历史数据,则可以构建当前数据查询以将考虑的分区限制为包含当前数据的分区。

  • 我你正在创建分区。请务必为每个分区选择正确的存储设备。将实际数据分区放在高速驱动器和较旧的另一种类型上。 (3认同)

Mar*_*ian 8

直接回答你的最后一个问题:不,我不认为它们是等效的。考虑一个非常大的表(数十 GB),需要搜索一天的数据。使用每日分区,您将只扫描当天的数据,而不会造成任何空间损失,而索引是一个单独的结构,可能无法容纳足够的信息(并且还会占用空间,这在谈到大型数据库时是一个问题)或可能不会够选择性。

无论如何,索引和分区并没有在使用和性能方面竞争相同的好处。您应该在数据库中找到余额。