楼主: yangxiangdong

数据库判断重复是否可取

[复制链接]
论坛徽章:
10
授权会员
日期:2005-10-30 17:05:332010年世界杯参赛球队:科特迪瓦
日期:2010-04-15 12:20:472010年世界杯参赛球队:智利
日期:2010-04-13 17:15:21生肖徽章2007版:蛇
日期:2009-09-24 13:54:11生肖徽章2007版:龙
日期:2009-09-22 13:56:012009日食纪念
日期:2009-07-22 09:30:00生肖徽章2007版:龙
日期:2009-02-10 13:45:15生肖徽章2007版:狗
日期:2009-02-03 13:53:34会员2006贡献徽章
日期:2006-04-17 13:46:34ITPUB十周年纪念徽章
日期:2011-11-01 16:20:28
11#
发表于 2004-12-9 14:45 | 只看该作者
根椐平衡二叉树的折半原理,可以如下计算:
2的36次方=68,719,476,736(68亿多)

使用道具 举报

回复
论坛徽章:
2
授权会员
日期:2005-10-30 17:05:33会员2006贡献徽章
日期:2006-04-17 13:46:34
12#
发表于 2004-12-9 15:00 | 只看该作者
谢谢 很好的理论
但是在实际中可能oracle并不只是简单的按照这种方法来实现的喔
考虑一下block中的index各个节点的顺序并不一定是从小到大的物理排放的

使用道具 举报

回复
论坛徽章:
10
授权会员
日期:2005-10-30 17:05:332010年世界杯参赛球队:科特迪瓦
日期:2010-04-15 12:20:472010年世界杯参赛球队:智利
日期:2010-04-13 17:15:21生肖徽章2007版:蛇
日期:2009-09-24 13:54:11生肖徽章2007版:龙
日期:2009-09-22 13:56:012009日食纪念
日期:2009-07-22 09:30:00生肖徽章2007版:龙
日期:2009-02-10 13:45:15生肖徽章2007版:狗
日期:2009-02-03 13:53:34会员2006贡献徽章
日期:2006-04-17 13:46:34ITPUB十周年纪念徽章
日期:2011-11-01 16:20:28
13#
发表于 2004-12-9 15:16 | 只看该作者
最初由 l2g32003 发布
[B]谢谢 很好的理论
但是在实际中可能oracle并不只是简单的按照这种方法来实现的喔
考虑一下block中的index各个节点的顺序并不一定是从小到大的物理排放的 [/B]

不是很明白你的意思。
你是不是指通过索引来定位一条记录在最坏的情况下可能要在索引段中查找几十个block才能获得记录的rowid?
如果是指这个,那索引也可以定期重建。

不能理解最上层的楼主为什么不用Oracle的主键索引,而要改用繁杂的程序来处理。

使用道具 举报

回复
论坛徽章:
1
会员2006贡献徽章
日期:2006-04-17 13:46:34
14#
 楼主| 发表于 2004-12-9 16:15 | 只看该作者

我的库不是oracle,是sybase

但我想原理都是一样的,这么大的数据量完全依靠主键索引一条一条insert不会有问题吗

使用道具 举报

回复
论坛徽章:
10
授权会员
日期:2005-10-30 17:05:332010年世界杯参赛球队:科特迪瓦
日期:2010-04-15 12:20:472010年世界杯参赛球队:智利
日期:2010-04-13 17:15:21生肖徽章2007版:蛇
日期:2009-09-24 13:54:11生肖徽章2007版:龙
日期:2009-09-22 13:56:012009日食纪念
日期:2009-07-22 09:30:00生肖徽章2007版:龙
日期:2009-02-10 13:45:15生肖徽章2007版:狗
日期:2009-02-03 13:53:34会员2006贡献徽章
日期:2006-04-17 13:46:34ITPUB十周年纪念徽章
日期:2011-11-01 16:20:28
15#
发表于 2004-12-9 16:44 | 只看该作者
你将当天生成的数据和表中的数据进行比较时难道就不要用索引吗,如果是这样,你不是走了很多弯路?

使用道具 举报

回复
论坛徽章:
1
会员2006贡献徽章
日期:2006-04-17 13:46:34
16#
 楼主| 发表于 2004-12-9 16:49 | 只看该作者

其实这么做我也说不出什么道理

一直就是这么干的,照您的意思是不需要什么临时表,直接从文件里一条一条读出来insert到正式表里吗,希望有过类似经验的朋友多发表一下看法

使用道具 举报

回复
论坛徽章:
0
17#
发表于 2004-12-9 17:25 | 只看该作者
如果建立唯一索引的话,你当天产生的重复数据大概能有多少?如果很多的话,数据库频繁的报错岂不是很痛苦?我感觉最好是从数据的入口想办法,完全可以从数据进入数据库之前从前台程序上控制,哪怕付出时间的代价也可以。

使用道具 举报

回复
论坛徽章:
1
会员2006贡献徽章
日期:2006-04-17 13:46:34
18#
 楼主| 发表于 2004-12-9 17:30 | 只看该作者

这是不行的

这个应用类似于一种数据中心,下面产生数据的程序并不是一家编写的,数据传到中心通过一种加密机制确定数据的合法性,然后根据数据清分收入,比如下面穿过来1000条数据,中心需要告诉下面有900条正常,100条重复.

使用道具 举报

回复
论坛徽章:
10
授权会员
日期:2005-10-30 17:05:332010年世界杯参赛球队:科特迪瓦
日期:2010-04-15 12:20:472010年世界杯参赛球队:智利
日期:2010-04-13 17:15:21生肖徽章2007版:蛇
日期:2009-09-24 13:54:11生肖徽章2007版:龙
日期:2009-09-22 13:56:012009日食纪念
日期:2009-07-22 09:30:00生肖徽章2007版:龙
日期:2009-02-10 13:45:15生肖徽章2007版:狗
日期:2009-02-03 13:53:34会员2006贡献徽章
日期:2006-04-17 13:46:34ITPUB十周年纪念徽章
日期:2011-11-01 16:20:28
19#
发表于 2004-12-9 17:37 | 只看该作者
最初由 ssonu 发布
[B]如果建立唯一索引的话,你当天产生的重复数据大概能有多少?如果很多的话,数据库频繁的报错岂不是很痛苦?我感觉最好是从数据的入口想办法,完全可以从数据进入数据库之前从前台程序上控制,哪怕付出时间的代价也可以。 [/B]

如果是用游标控制一条条进行插入就可以很容易地将重复的记录忽略,如下写错误处理部分:

Exception
   When DUP_VAL_ON_INDEX then
      null;
End;

如果插入的数据中有重复,用批插入的方法(1. Insert ... Select ... 2.Forall )在我想来是无法成功的,不知谁有高招?

使用道具 举报

回复
论坛徽章:
10
授权会员
日期:2005-10-30 17:05:33ITPUB元老
日期:2006-06-08 10:09:34ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44
20#
发表于 2004-12-9 18:28 | 只看该作者
以前在电信的计费系统中遇到同样的烦恼。
数据库剔重由于库大索引的原因,话单入库的极限为300条每秒,最后采用文件剔重的办法,达到好几千条每秒。不过也是要耗费很多内存的。还要看具不具备文件剔重的条件。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表