大表数据高效切片:基于主键的无排序 WHERE 条件生成算法
背景
在异构数据库迁移的项目中,核对迁移前后的大表数据一致性始终是一个难题。虽然存在库内计算全表特征值的对比工具,但通常只适用于特定数据库类型(如 Oracle 与 openGauss/GaussDB),且只能判断全表是否一致,无法定位差异行。如果表数据量极大,进行一次全表扫描的开销也非常大,因此必须考虑分片算法。
传统的分片算法大多需要排序,一般基于主键排序。如果使用行号去做切片,会导致每个分片查询实际上都进行了全表扫描,性能依旧很差。自然想到需要使用索引字段作为分片条件,但复合主键如何生成 WHERE 条件,能确保各分片数据不重叠无遗漏,这个算法具有一定难度。

