我有一个表,即 X,有大约 64 列存储在线金融交易。每天有数百万条记录被插入到 X 中。大约有 16 列 X 是可查询的,也就是说很多系统报表需要根据这 16 列的值来过滤 X 的数据。
拥有所有这 16 列的数据库索引会使插入操作太慢。另一方面,在某些列上没有索引也会使某些报告太慢。
所以,这就是问题所在。我如何设计表 X 及其索引以获得最佳的插入和报告性能?我使用 oracle 11g DBMS。
尝试对表进行分区。与其创建一个巨大的表,不如每天、每周或每月创建一个,并创建一个将所有这些表连接起来以进行查询的视图。或者,Oracle 支持分区表(但是否可用取决于您的 Oracle 版本)。
插入数据时,插入正确的分区。这样,要更新的索引会小得多。缺点是您将需要更多的索引空间,因为索引值将被复制。
从积极的方面来说,查询可能会快得多,因为数据库可以在不同磁盘上并行读取表。
另请注意,SQL 数据库不会扩展到任何大小。请考虑使用集群或云数据库。它们还有其他缺点,但它们可以处理任意数量的记录(只要您有足够的物理空间供服务器使用)。
建议: