FreeSql icon indicating copy to clipboard operation
FreeSql copied to clipboard

CodeFirst 添加对分区表的支持

Open hd2y opened this issue 3 years ago • 6 comments

数据库对分区表的支持情况:

数据库类型 支持分区类型 版本支持情况 说明
MySQL RANGEKEYHASHLISTCOLUMNS v5.1 开始支持,v5.7 增强 LISTRANGEv5.5 版本支持
SQL Server RANGE 所有版本 比较特殊的 RANGE 支持,参考 PARTITION FUNCTION
Oracle RANGELISTHASH 9i版本开始有限支持 现在主要应用的版本是11g+,完全支持
PostgreSQL RANGELISTHASH v10.x 更早的版本也可以使用 pg_pathman
达梦 RANGELISTHASH 支持
神通 RANGELISTHASH 支持
人大金仓 RANGELISTHASH 支持
SQLite 不支持 / /
Access 不支持 / /
Firebird 不支持 / /

后续补充各数据库类型创建或修改 RANGE 等分区的 SQL 脚本。

hd2y avatar May 26 '22 03:05 hd2y

sqlserver 2005 就有分区了

2881099 avatar May 26 '22 04:05 2881099

sqlserver 2005 就有分区了

哈哈,被下面这句话误导了,我还奇怪呢。

在 SQL Server 2016 (13.x) SP1 之前,SQL Server 的各版本中均不提供已分区的表和索引。

没注意上面受支持的是所有版本。

hd2y avatar May 26 '22 05:05 hd2y

主要 api 不好设计,差异化太多。。就像现在 BulkCopy

ExecuteSqlBulCopy()、ExecuteMySqlBulCopy()、ExecuteDmBulCopy()、ExecutePgCopy();

2881099 avatar May 26 '22 08:05 2881099

其实首先可以考虑支持 RANGE,其次是 LIST 以及 HASH

我现在有个困扰是项目中不可避免在数据库中写一些视图、存储过程等处理特殊业务,现在的项目里也有数不清的陈年代码,短时间没办法重构,如果直接分表,小组里面反对意见很大,要改的东西太多了。

我们考虑用分区策略,一种是根据ID或者时间也就是 RANGE 分区,还有一些表使用状态字段 LIST 分区。

周末的时候再查查资料看一下,现在每天被各种项目折磨的头晕眼花的,这种优化都要放在后面再慢慢处理了。😔

说了很多纯吐槽了没说到重点,其实不用把各种数据库的分区表特性都支持,我考虑是提取一个通用的,可以接受的方案,处理像我这样没办法分库分表的场景。

hd2y avatar May 26 '22 09:05 hd2y

分区只是数据库层面的事,程序层面看它就是单表操作。

2881099 avatar May 26 '22 09:05 2881099

分区只是数据库层面的事,程序层面看它就是单表操作。

是的,要的也是这个效果,现在项目 Oracle 以及 SQL Server 用的多,对分区表的支持很友好,但是之前从来没考虑性能瓶颈,没有考虑过分区/分库/分表,导致现在积重难返了,只能考虑用分区这种见效快的方案了。

hd2y avatar May 26 '22 09:05 hd2y