123
返回列表 发新帖
楼主: langgufu

[PL/SQL] 【讨论】大数据表查询,效率问题

[复制链接]
论坛徽章:
529
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
发表于 2015-1-23 00:49 | 显示全部楼层
taomct 发表于 2015-1-22 23:04
SCOTT.EMP 為範例

CREATE TABLE SCOTT.EMP_TEST as SELECT * FROM SCOTT.EMP;

你的方法只是在实现LOOKUP数据,DETERMINISTIC要求LOOKUP表是静态的。如果改了部门名称,所有索引全部得重建。
而且也看不出要如何“比对”。假设你有EMP_TEST1, EMP_TEST2 两张大表需要比对,这虚拟列有什么用?

使用道具 举报

回复
认证徽章
论坛徽章:
41
生肖徽章:鼠
日期:2013-12-06 14:15:45生肖徽章:牛
日期:2013-12-06 14:15:45生肖徽章:虎
日期:2013-12-06 14:15:45生肖徽章:兔
日期:2013-12-06 14:15:45生肖徽章:龙
日期:2013-12-06 14:15:45生肖徽章:蛇
日期:2013-12-06 14:15:45生肖徽章:马
日期:2013-12-06 14:15:45生肖徽章:羊
日期:2013-12-06 14:15:45生肖徽章:猴
日期:2013-12-06 14:15:45生肖徽章:鸡
日期:2013-12-06 14:15:45
发表于 2015-1-23 08:44 | 显示全部楼层
去掉游标,直接比较。

使用道具 举报

回复
论坛徽章:
3
懒羊羊
日期:2015-03-04 14:52:112015年新春福章
日期:2015-03-06 11:58:18天蝎座
日期:2016-05-14 12:00:32
发表于 2015-1-23 21:13 | 显示全部楼层
newkid 发表于 2015-1-23 00:49
你的方法只是在实现LOOKUP数据,DETERMINISTIC要求LOOKUP表是静态的。如果改了部门名称,所有索引全部得重 ...

舉例很多用途:
  FUNCTION WAIT_CHECK_FUNC ( IN_OWNER VARCHAR2 ) RETURN VARCHAR2 ...
  IS
     CHECK_FLG  VARCHAR (5) := '00000';
  BEGIN     -- 資料表是否是 lock 狀態. 範例
     CHECK_FLG := 'x';
     SELECT 'o'
       INTO CHECK_FLG
       FROM V$LOCKED_OBJECT A, DBA_OBJECTS B, V$SESSION C
      WHERE A.OBJECT_ID   = B.OBJECT_ID
        AND A.SESSION_ID  = C.SID(+)
        AND B.OWNER       = IN_OWNER
        AND B.OBJECT_NAME LIKE 'FGA_%' ESCAPE '\' -- '
        AND B.OBJECT_TYPE = 'TABLE';
     SELECT ... into ... from ...

     SELECT ... into ... from ...

     SELECT ... into ... from ...

     SELECT ... into ... from ...

     RETURN CHECK_FLG;
  EXCEPTION
  WHEN OTHERS THEN
     RETURN CHECK_FLG;
  END;

可以寫需要SQL在  FUNCTION ... 運用很廣
RETURN 方式可以是 '1011'

第一碼是: 1 有符合
第二碼是: 0 總金額有不符合
第三碼是 1 總金數量有符合
第四碼是 1 歷史資料存在

這麼簡單講一次學生就懂了.  我只是引入門...敘述方法.
不在限於只回傳一個名稱啦...那只是一個範例....

這裡只有討論大資料比對方式, 我們設計都是採用 '1011....' 設計模式.
很快就可以找出不是 '11111' 的資料表示資料有異常需要




使用道具 举报

回复
论坛徽章:
529
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
发表于 2015-1-24 00:15 | 显示全部楼层
taomct 发表于 2015-1-23 21:13
舉例很多用途:
  FUNCTION WAIT_CHECK_FUNC ( IN_OWNER VARCHAR2 ) RETURN VARCHAR2 ...
  IS

你说的是如何把比对的结果保存起来。楼主关心的是实现比对的手段。
用自定义函数做虚拟列不适用于动态数据,只能用于静态数据。

使用道具 举报

回复
论坛徽章:
403
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
发表于 2015-1-24 00:17 | 显示全部楼层
用etl工具抓到另一个库做比对吧

使用道具 举报

回复
论坛徽章:
3
懒羊羊
日期:2015-03-04 14:52:112015年新春福章
日期:2015-03-06 11:58:18天蝎座
日期:2016-05-14 12:00:32
发表于 2015-1-24 01:56 | 显示全部楼层
本帖最后由 taomct 于 2015-1-24 02:21 编辑

避免線上資源浪費在比對也可以使用 單向 DBMS Oracle Stream 方式也是一種不錯辦法.我們IT都是採用單向 DBMS Oracle Stream 方式較多.
在單機愛建什麼index要建什麼 temp table 都隨意啦.


ps. 萬一資料量有差異時會使用 RMAN 方式匯入到單機在重啟 DBMS Oracle Stream 方式, 這個是有遇過但確實原因我不是很清楚.

使用道具 举报

回复
论坛徽章:
529
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
发表于 2015-1-24 03:20 | 显示全部楼层
taomct 发表于 2015-1-24 01:56
避免線上資源浪費在比對也可以使用 單向 DBMS Oracle Stream 方式也是一種不錯辦法.我們IT都是採用單向 DBM ...

怎么又讲起STREAM复制了?那你就说说如何用STREAM实现两张大表的比对?

使用道具 举报

回复
论坛徽章:
3
懒羊羊
日期:2015-03-04 14:52:112015年新春福章
日期:2015-03-06 11:58:18天蝎座
日期:2016-05-14 12:00:32
发表于 2015-1-25 23:04 | 显示全部楼层
newkid 发表于 2015-1-24 03:20
怎么又讲起STREAM复制了?那你就说说如何用STREAM实现两张大表的比对?

我昨天問了一下IT, 現在已經沒有使用 Stream 方式, 網管也不允許了.
有發生過備用機意外關機之後啟用導致資料遺漏比來源資料還少及異動部分未更新現況.
抱歉這個方法不行了.

使用道具 举报

回复
论坛徽章:
0
发表于 2016-12-23 16:59 | 显示全部楼层
受教了,谢谢。

使用道具 举报

回复
论坛徽章:
14
2009新春纪念徽章
日期:2009-01-04 14:52:28沸羊羊
日期:2015-03-04 14:51:52优秀写手
日期:2014-03-14 06:00:13马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:022013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:08:15蜘蛛蛋
日期:2012-06-27 21:08:142012新春纪念徽章
日期:2012-01-04 11:53:29ITPUB十周年纪念徽章
日期:2011-11-01 16:23:26
发表于 2016-12-26 12:24 | 显示全部楼层
taomct 发表于 2015-1-25 23:04
我昨天問了一下IT, 現在已經沒有使用 Stream 方式, 網管也不允許了.
有發生過備用機意外關機之後啟用導 ...

B表不能建立日期索引吗?
日期+几个约束列做索引。

使用道具 举报

回复

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

本版积分规则 发表回复

PostgreSQL中国大会,参会票抢购!

由 PostgreSQL中文社区与ITPUB联合主办的第九届《PostgreSQL 中国技术大会》将在北京隆重召开。PostgreSQL 作为功能最强的的开源关系型数据库之一,得到了越来越多企业的推广和运用,也越来越受到广大技术爱好者的欢迎和重视。这将是 PostgreSQL 的又一次交流盛会。
----------------------------------------
时间:2019年11月29~11月30日

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