数据库的历史表越来越大,访问速度就会慢,这是老问题了。按时间字段分表,是个比较靠谱的优化手段。像我之前ChinaGas库的t_base_History表,就是按CollectDate字段来分的,效果还不错。

用的是 SQL Server 的分区功能,先建了 7 个数据库文件CGdbSF1~CGdbSF7,每个文件对应一个时间段,文件名是CGdbSF1.ndf这种格式,管理起来也方便。

是建分区函数CG_function,再搞一个分区方案CG_scheme,把这些数据库文件都挂上去。SQL Server 那一套东西还挺灵活的,用得顺手。

哦对了,MySQL、PostgreSQL、Oracle 这些数据库也都有分区功能。你用啥数据库就参考相应的资料就好,下面整理了一些不错的文章:

SQL Server 表分区:对 SQL Server 的分区机制讲得蛮清楚。

MySQL 表分区:适合 MySQL 用户看看。

PostgreSQL 表分区技术详解:Postgre 用的人也不少,讲得比较实用。

Oracle 表分区全解析:Oracle 做大数据场景还是挺稳的。

如果你手上也有大表要优化,不妨按这个思路试试。建议先在测试环境跑一套,看看执行计划和查询时间,别直接动生产哦~