我将为一个包含 50 亿条记录的表构建一个索引。将使用无日志记录和并行,但是我可以使用其他选项或技巧来加速索引构建的创建吗?
最佳答案
除了并行性和无日志记录之外,这些功能也许能够缩短索引创建时间:
- 压缩 - 压缩需要额外的 CPU 时间,但使用较少的 I/O。在某些情况下,此选项可能可以节省时间,例如如果您有高度可压缩的多列索引。
- NOSORT - 如果行恰好按顺序插入,例如您刚刚加载预排序的数据,则
NOSORT
选项可以节省大量时间。< - 不重新收集统计信息 - 构建索引时会自动收集统计信息,因此之后不要手动收集索引统计信息。如果您要收集表统计信息,请使用参数
cascade => false
来防止重新收集索引统计信息。
我同意 Paul W 的观点,即获得正确的并行度可能是最重要的因素。如果您想优化此语句,并且不关心同时运行的其他任何内容的性能,crank the DOP as high as possible .
但我对使用分区来加速索引创建持怀疑态度。由于排序时间复杂度为 O(n*log(n)),因此对一个大集合进行排序通常比对多个较小集合进行排序更快。
关于Oracle 索引性能选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76393631/