<b>如安在Oracle数据库中联合异构数据-开辟技术</b>[Oracle防范]
本文“<b>如安在Oracle数据库中联合异构数据-开辟技术</b>[Oracle防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
假如你有两个数据根源,如平面文件或表数据,并且要将他们归并在一同,你将怎么做?假如他们有一个共同的属性,如客户ID,那么该办理筹划应当是很明显:归并相关的属性,在这个例子中,只需归并客户ID就够了.假如没有任何共同之处该怎么办呢?唯一的要求就是,将数据源1中的记录和数据源2中的记录举行匹配 .并且,那个记录去和另一个记录匹配并没有关系,那么问题是,一个数据源中的每一个记录若何得到从其他数据源记录的标志.
上述问题可以被描写为向一个数据库中加入了差别的或看似无关的数据.在先前的文章的文章中,触及若何利用ROWNUM在无关的数据之间创造接洽.该归并办法的本质是操纵甲骨文供应虚拟数据列来成立接洽.下面的查询可以用来作为CREATE TABLE AS SELECT声明的一部份或作为基于满意加入条件既定目标表的插入.
SELECT * FROM (SELECT , ROWNUM AS rownum_a FROM TABLE_A ) ALIAS_A, (SELECT , ROWNUM AS rownum_b FROM TABLE_B ) ALIAS_B WHERE ALIAS_A.rownum_a = ALIAS_B.rownum_b; |
假定要归并的记录的数目过大(如数以百万计),这种办法潜在的缺陷是什么?那么,当一行作为一个记录时又若何了?我们没有真正的掌握权决意的查询所返回后果行的次序,直到我们履行查询之前,甲骨文是不知道记录的行号的.换言之, ROWNUM是在这样的事实上成立的.假如你要从两个地方挑选数百万行,你将支付甲骨文公司为每个记录分配行号(只针对你的查询,而不是永久)的时间.
让我们监测将两个有100万行的表归并到一同的一个会话.在这第一个例子中,这个数据源已经记录可100万个记录.表A范围从1到1000000及表B范围从1000001至2000000 (即在第一个表中再加入100万行) .假如加入后可以完善的保持行的次序,那么有序对将像下面表格这个模样:
当我们查看数据时(通过Toad)发现Oracle数据库并不履行一个完善的排序,并且相差甚远.
该ROWNUM_A和B值一个一个都匹配,因为这是我们匹配/归并的.注意:记录1321 (和1001321 )是若何同ROWNUM 1标志在一同的 .所以我们可以推断是,甲骨文以一样的方法弥补表格之间的空白区块.这应当说服你一次乃至永久(假如你至今还不知知道), ROWNUM虚拟数据列已没有意义或与个表中记录的实际次序无关.
成立表的声明追踪, 经过TKPROF 解析后,输出后果以下:
CREATE TABLE TABLE_ROWNUM AS SELECT * FROM (SELECT ID, ROWNUM AS rownum_a FROM TABLE_A) ALIAS_A, (SELECT ID AS id_b, ROWNUM AS rownum_b FROM TABLE_B) ALIAS_B WHERE ALIAS_A.rownum_a = ALIAS_B.rownum_b call count cpu elapsed disk query current rows ------- ------ -------- ---------- ---------- ---------- ---------- ---------- Parse 1 0.01 0.00 0 0 0 0 Execute 1 4.41 5.63 1770 12324 5239 1000000 Fetch 0 0.00 0.00 0 0 0 0 ------- ------ -------- ---------- ---------- ---------- ---------- ---------- total 2 4.42 5.64 1770 12324 5239 1000000 |
我们知道一个事实,即每个表都有100万行.在解析了表后, NUM_ROWS值显示为1034591 .当与甲骨文本身将通过持续计数报告的值相对比时要当心依靠通过第三方工具查抄出的值(包含从USER_TABLES挑选NUM_ROWS ).为什么会有差别呢?能否是因为解析是基于样本或预算的数据,或按照查抄到的每个记录?
以上是“<b>如安在Oracle数据库中联合异构数据-开辟技术</b>[Oracle防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |