2

我有一个表,即 X,有大约 64 列存储在线金融交易。每天有数百万条记录被插入到 X 中。大约有 16 列 X 是可查询的,也就是说很多系统报表需要根据这 16 列的值来过滤 X 的数据。

拥有所有这 16 列的数据库索引会使插入操作太慢。另一方面,在某些列上没有索引也会使某些报告太慢。

所以,这就是问题所在。我如何设计表 X 及其索引以获得最佳的插入和报告性能?我使用 oracle 11g DBMS。

4

2 回答 2

2

尝试对表进行分区。与其创建一个巨大的表,不如每天、每周或每月创建一个,并创建一个将所有这些表连接起来以进行查询的视图。或者,Oracle 支持分区表(但是否可用取决于您的 Oracle 版本)。

插入数据时,插入正确的分区。这样,要更新的索引会小得多。缺点是您将需要更多的索引空间,因为索引值将被复制。

从积极的方面来说,查询可能会快得多,因为数据库可以在不同磁盘上并行读取表。

另请注意,SQL 数据库不会扩展到任何大小。请考虑使用集群或云数据库。它们还有其他缺点,但它们可以处理任意数量的记录(只要您有足够的物理空间供服务器使用)。

于 2012-10-15T13:49:22.820 回答
1

建议:

  1. 如果可能,尝试规范化表格。
  2. 如果不存在则创建聚集索引。(INT64 会在你的情况下)
  3. 如果索引列的大小很大并且遵循某种模式,请尝试将不同的数据移动到单独的查找表并替换为代理键引用,这将减少索引大小。
  4. 创建具有多个键的索引。(减少索引数量)
  5. 对表进行分区,因为一年内您将获得大约 3.6 亿条记录。
于 2012-10-16T18:45:09.977 回答