[quote=引用 27 楼 okkk 的回复:] 非Oracle的方法: 分配 1G的内存,每一个bit代表一个ID[需要用算法将ID映射到0-100亿的整数空间]。 从数据库读取ID,填冲到内存对应位上,如果是 0-1 ,那么是正常,如果是1-1,那么ID重复,输出到计数程序或文件。 数据读取完成后,检查整个空间,值为0的bit位,是缺失的ID。 逻辑简单,可以做成分布式程序,快速计算。
非Oracle的方法: 分配 1G的内存,每一个bit代表一个ID[需要用算法将ID映射到0-100亿的整数空间]。 从数据库读取ID,填冲到内存对应位上,如果是 0-1 ,那么是正常,如果是1-1,那么ID重复,输出到计数程序或文件。 数据读取完成后,检查整个空间,值为0的bit位,是缺失的ID。 逻辑简单,可以做成分布式程序,快速计算。
添加标识,由关键字段及标识组成新表,添加所有记录后索引,通过比较删除重复记录,通过标识添加记录生成新的数据记录。
说一下我的想法吧,也不一定是最好的方案 1、先将现有数据划分为N个分区 如果此表为分区表,可直接利用分区表的分区划分 不是分区表的话建议按照rowid进行分区,按rowid检索的速度应该是最快的 2、先将每个分区分别自己内部去重 3、然后两两组合去重 1和2、1和3、1和4……1和N 2和3、2和4、2和5……2和N …… N-1和N 至于应该划分多少个分区,不好说,看情况吧,一点点测试吧 这么大的数据量修改结构或是增加索引都不太现实,只能利用现有状况进行处理,确实让人头大
我觉得还是用oracle自身的方式比较好, 毕竟在数据检索方面,我们都没有oracle专业 数据量较大,删除时可以考虑采用分批处理 每批次多少根据自身数据库的环境设置
这个有点麻烦,典型的为设计问题埋单。推荐一下,看看谁有好办法
3,499
社区成员
18,710
社区内容
加载中
试试用AI创作助手写篇文章吧