一张表很大的时候

来源:互联网 发布:php new class 编辑:程序博客网 时间:2024/04/19 11:36

讨论过程:

1    分表,建立365张天表,然后根据需要建立周视图和月视图,根据数据需要保留的天数定期清理不用的历史记录

 

2    分区表就大大提高你的性能,另外,这种数据应该只把最近或最常用的放在当前服务器上其它数据全部挪走. 

 

3    之前一个项目在国内某通讯公司,记流水的一张表,一天一个分区

 

数据的一致性(复制性)、高效性、事务处理、数据的安全性等

 

数据库大表的优化:

采用蔟表(clustered tables)及蔟索引(Clustered Index)
蔟表和蔟索引是oracle所提供的一种技术,其基本思想是将几张具有相同数据项、并且经常性一起使用的表通过共享数据块(data block)的模式存放在一起。各表间的共同字段作为蔟键值(cluster key),数据库在访问数据时,首先找到蔟键值,以此同时获得若干张表的相关数据。蔟表所能带来的好处是可以减少I/O和减少存储空间,其中我更看重前者。

采用表分区(partition)
表分区技术是在超大型数据库(VLDB)中将大表及其索引通过分区(patition)的形式分割为若干较小、可管理的小块,并且每一分区可进一步划分为更小的子分区(sub partition)。而这种分区对于应用来说是透明的。通过对表进行分区,可以获得以下的好处:
1)减少数据损坏的可能性。
2)各分区可以独立备份和恢复,增强了数据库的可管理性。
3)可以控制分区在硬盘上的分布,以均衡IO,改善了数据库的性能。


蔟表与表分区技术的侧重点各有不同,前者侧重于改进关联表间查询的效率,而表分区侧重于大表的可管理性及局部查询的性能。而这两项对于我的系统来说都是极为重要。由于本人技术限制,目前尚不确定两者是否可以同时实现,有那位在这方面有经验的给点指导将不胜感激。 
在两者无法同时实现的情况下,应依照需实现的功能有所取舍。
Oracle的表分区有以下几种类型:
1)范围分区:将表按某一字段或若干个字段的取值范围分区。
2)hash分区:将表按某一字段的值均匀地分布到若干个指定的分区。
3)复合分区:结合了前面两种分区类型的优点,首先通过值范围将表进行分区,然后以hash模式将数据进一步均匀分配至物理存储位置。

 

如:

由于该表数据量相当大,每天都400万数据,这样我们采取的方案是每天生成一个表存储。

这种情况下的删除/更新/查询就比较麻烦,因为不可能对这个N个表都执行一次SQL吧。每天一个表是很多的。

原创粉丝点击