首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

出个小题目,有兴趣的来看看,大数据量的匹配效率有关问题

2012-02-13 
出个小题目,有兴趣的来看看,大数据量的匹配效率问题Oracle数据库,817以上版本。两份数据,每份1000万记录,除

出个小题目,有兴趣的来看看,大数据量的匹配效率问题
Oracle数据库,817以上版本。

两份数据,每份1000万记录,除(唯一)主键外有300个字段。字段类型分别为char,number类型(char长度为50以下,number长度精度不等)。

问题:
如何对这2分数据进行比较。找出2份数据中,不能完全对应的数据。给出主键即可。

提示,不能完全对应有3中情况:
1、A数据中有的B没有
2、B数据中有的A没有
3、A,B数据中,200个字段中的任一个或多个字段不等。

自己刚搞完,想想有点意思,拿来大家讨论参考。

[解决办法]
watching
[解决办法]
用双指针p,q
int diff = p-> ID - q-> I
if diff ==0
test *p == *q?
else if diff > 0
out q++
else
out p++
[解决办法]
用时1000万+1000万
[解决办法]
偶想出一BT方法:

读出A里所有数据,
用std::map <主键,根据此记录所有数据连接成的字符串所生成的MD5码> 保存为mapA

然后一个个读出B的数据(也生成MD5码)对比好啦,哈哈,简单快捷有效,而且应该不会占用太大内存,MD5码才128/8=16字节 *10M = 160M 再加主Key的估计300M应该够了

[解决办法]
学习毛毛.
[解决办法]
happyct(绿叶对大树的情怀)
===========================
是有点乱七八糟的

不过是双表对比的标准算法
[解决办法]
提示,不能完全对应有3中情况:
1、A数据中有的B没有
2、B数据中有的A没有
3、A,B数据中,200个字段中的任一个或多个字段不等。
-------------------------------------
我来解决1和2,3只能给出个提示
1和2采用差集:mimus
A数据中有的B没有:
select A.key from A
mimus
select B.key from B
B数据中有的A没有:
select B.key from B
mimus
select A.key from A

3。求交集。oracle有现成的函数,但区分某些字段,比较麻烦,最好采用exist的方式来求。
select A.* from A
not exist (selct l from B where A.KEY =B.KEY)


[解决办法]
使用hash表的方法处理应该是不错的方法
也使用std::map
[解决办法]
動態生成這樣一條 SQL 語句:
select A.key
from
(select A.* from A left JOIN select B.* from B on A.key == B.key ) as C
where A.F1 <> B.F1 OR A.F2 <> B.F2 OR .......

不知道效率如何。。。。
[解决办法]
select A.* from A left JOIN select B.* from B on A.key == B.key
改成:
select A.*, B.* from A left JOIN B on A.key == B.key

[解决办法]
PPP的方式不可取
应该考虑别的方式~~~
[解决办法]
有對比就有進步。
我只是說了一個用標准SQL找到正確結果的方法。我也在等happyct的好辦法啊。
對比一下才能知道花費了不少力氣的新方法其效率提高了多少呀。
(同樣的SQL語句,不同版本的數據庫,其執行效率會有差異mimus也就Oracle才有啊。)
[解决办法]
用存贮过程比较好!
建立临时表,以前做大量数据处理里,就是这样的!

热点排行