如何管理包含大量插入和选择的大型表?

时间:2012-10-15 13:34:19

标签: sql database oracle indexing

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

对所有这16列使用DB索引会使插入操作太慢。另一方面,在某些列上没有索引会使某些报告过于缓慢。

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

2 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:1)

Recommemdations:

  1. 尽可能尝试规范化表格。
  2. 如果不存在,则创建聚簇索引。 (INT64将在您的情况下执行)
  3. 如果索引列的大小很大并且遵循某种模式,请尝试将不同的数据移动到单独的查找表并替换为代理键引用,这将减小索引大小。
  4. 使用多个键创建索引。 (减少索引数)
  5. 由于在一年内您将获得大约3.6亿条记录,因此对表格进行了分区。