用压缩索引替换外键列
Replace foreign key column with compressed index
我想在我的数据库中保留一些 table。
例如,一个 table 有一个简单的 Primary-Key-ID 列和一个 VARCHAR2 列。
VARCHAR2 列没有重复值,但具有不同的唯一 ID。
此 table 的主键列仅在另一个 table 中作为外键被引用一次。
我现在的想法是将 VARCHAR2 列中的值插入到包含主键的 table 中。
我现在可以删除外键引用,删除 table 并获得一个包含所有(重复)VARCHAR2 值的新列。这些我想以 unique/distinct 的方式压缩。
我听说过 Oracle 数据库中的索引可以压缩列,但我不太确定我需要哪个索引或如何使用它们...
基础功能(和存储节省)应该与之前的 table 唯一值和外键引用大致相同。
提前感谢您的帮助!
Oracle 基本压缩允许我们压缩 tables。它有几个明显的限制,其中最重要的是它不适合 OLTP 数据库。直接路径插入、更新和删除不会受益。所以你不能那样做你想做的事。如果您的组织已经获得 Advanced Compression 许可证,那么您有更多选择,但压缩仍然适用于 table 而不是单个列。
我认为您混淆了索引压缩,它确实对列进行操作,因为它允许我们压缩复合索引的 leading 列。但只有当这些列中有大量重复时才值得应用。如果您的索引具有前导列的唯一 ID,则压缩实际上会增加 space 占用的总量。 (这只是为什么应该首先使用最少选择性的列构建复合索引,最后构建最具选择性的列的一个原因。)
您的 table 是经典的键值查找 table。因此,您可以考虑将其转换为索引组织的 table。通过仅维护一个专用索引而不是 table 及其主键索引,您可以为自己节省一些 space。 Find out more
我想在我的数据库中保留一些 table。
例如,一个 table 有一个简单的 Primary-Key-ID 列和一个 VARCHAR2 列。 VARCHAR2 列没有重复值,但具有不同的唯一 ID。
此 table 的主键列仅在另一个 table 中作为外键被引用一次。
我现在的想法是将 VARCHAR2 列中的值插入到包含主键的 table 中。
我现在可以删除外键引用,删除 table 并获得一个包含所有(重复)VARCHAR2 值的新列。这些我想以 unique/distinct 的方式压缩。
我听说过 Oracle 数据库中的索引可以压缩列,但我不太确定我需要哪个索引或如何使用它们...
基础功能(和存储节省)应该与之前的 table 唯一值和外键引用大致相同。
提前感谢您的帮助!
Oracle 基本压缩允许我们压缩 tables。它有几个明显的限制,其中最重要的是它不适合 OLTP 数据库。直接路径插入、更新和删除不会受益。所以你不能那样做你想做的事。如果您的组织已经获得 Advanced Compression 许可证,那么您有更多选择,但压缩仍然适用于 table 而不是单个列。
我认为您混淆了索引压缩,它确实对列进行操作,因为它允许我们压缩复合索引的 leading 列。但只有当这些列中有大量重复时才值得应用。如果您的索引具有前导列的唯一 ID,则压缩实际上会增加 space 占用的总量。 (这只是为什么应该首先使用最少选择性的列构建复合索引,最后构建最具选择性的列的一个原因。)
您的 table 是经典的键值查找 table。因此,您可以考虑将其转换为索引组织的 table。通过仅维护一个专用索引而不是 table 及其主键索引,您可以为自己节省一些 space。 Find out more