楼主: wabjtam123

[精华] ORACLE小小说之武朝迷案

[复制链接]
招聘 : 数据库管理员
认证徽章
论坛徽章:
20
祖国60周年纪念徽章
日期:2009-10-09 08:28:00数据库板块每日发贴之星
日期:2011-02-20 01:01:01ITPUB季度 技术新星
日期:2011-04-02 10:31:09ITPUB十周年纪念徽章
日期:2011-11-01 16:24:042012新春纪念徽章
日期:2012-01-04 11:54:26玉石琵琶
日期:2012-02-21 15:04:38最佳人气徽章
日期:2012-03-13 17:39:18ITPUB 11周年纪念徽章
日期:2012-10-09 18:09:192013年新春福章
日期:2013-02-25 14:51:242011新春纪念徽章
日期:2011-02-18 11:43:33
发表于 2010-3-16 16:19 | 显示全部楼层
果然是牛贴   不是技术 发现楼主的文笔很好 哈哈。。。。。。。

使用道具 举报

回复
认证徽章
论坛徽章:
131
2006年度最佳技术回答
日期:2007-01-24 12:58:48福特
日期:2013-10-24 13:57:422014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上加薪
日期:2014-02-19 11:55:142013年新春福章
日期:2013-02-25 14:51:24
发表于 2010-3-16 16:22 | 显示全部楼层
SELECT PERSON
FROM
TACHE WHERE FLOW_ID = :B1 AND STATE <> 'F'
这个SQL可能没有适当的index.
每次执行返回一行,但是每次执行500 logical read.

使用道具 举报

回复
认证徽章
论坛徽章:
50
2014年世界杯参赛球队: 荷兰
日期:2014-07-11 07:56:59蛋疼蛋
日期:2012-03-06 07:22:542012新春纪念徽章
日期:2012-02-13 15:09:522012新春纪念徽章
日期:2012-02-13 15:09:522012新春纪念徽章
日期:2012-02-13 15:09:522012新春纪念徽章
日期:2012-02-13 15:09:522012新春纪念徽章
日期:2012-02-13 15:09:522012新春纪念徽章
日期:2012-01-04 11:53:29蛋疼蛋
日期:2011-11-11 15:47:00ITPUB十周年纪念徽章
日期:2011-11-01 16:23:26
发表于 2010-3-16 16:24 | 显示全部楼层
原帖由 rollingpig 于 2010-3-16 16:11 发表
最后的SQL应该是这样子
Select b.*,Pkp_Flow_Function.Getflowcurstaffname(b.Flow_Id) Flow_Operator
   From (Select Rownum Sid, a.*
           From (Select a.Ne_Alarm_List_Id Id,
                        a.Flow_Id, /*流程ID*/
                        a.Oprt_State Oprtstate, /*操作状态*/
                        a.Alarm_State Alarmstate, /*告警状态*/
                        a.Alarm_Level Alarmlevel, /*告警级别*/
                        a.Perf_Msg_Id, /*性能消息ID*/
                        a.Alarm_Class Alarmclass, /*告警类别*/
                        To_Char(a.Generate_Time, 'yyyy-mm-dd') Generatedate, /*产生日期*/
                        To_Char(a.Last_Generate_Time, 'yyyy-mm-dd') Lastdate, /*最后产生日期*/
                        B1.List_Label Alarm_Type,
                        C1.Ne_Name,
                        d.Kpi_Name,
                        a.Kpi_Value,
                        Decode(C1.Ne_Flag, 6, e.Region_Name, C2.Ne_Name) Datasource,
                        '' ||
                        Decode(a.Alarm_Level,
                               '1',
                               '严重',
                               '2',
                               '重要',
                               '3',
                               '一般',
                               '未知') || '' Alarm_Level,
                        To_Char(a.Generate_Time, 'yyyy-mm-dd hh24:mi:ss') Generate_Time,
                        To_Char(a.Last_Generate_Time, 'yyyy-mm-dd hh24:mi:ss') Last_Generate_Time,
                        --Pkp_Flow_Function.Getflowcurstaffname(a.Flow_Id) Flow_Operator,
                        a.Alarm_Times,
                        Decode(a.Oprt_State,
                               '20',
                               To_Char(a.Confirm_Time, 'yyyy-mm-dd hh24:mi:ss'),
                               '25',
                               To_Char(a.Suspend_Time, 'yyyy-mm-dd hh24:mi:ss'),
                               '30',
                               To_Char(a.Clear_Time, 'yyyy-mm-dd hh24:mi:ss'),
                               '40',
                               To_Char(a.Delete_Time, 'yyyy-mm-dd hh24:mi:ss')) Executetim,
                        B2.List_Label Alarm_State,
                        Decode(a.Flow_Id, '', '未派单', '已派单') Work_State /*自定义列项*/
                   From Ne_Alarm_List a,
                        (Select *
                           From Tp_Domain_Listvalues
                          Where Domain_Code = 'DOMAIN_NE_ALARM_TYPE') B1,
                        (Select *
                           From Tp_Domain_Listvalues
                          Where Domain_Code = 'DOMAIN_ALARM_STATE') B2,
                        (Select *
                           From Tp_Domain_Listvalues
                          Where Domain_Code = 'DOMAIN_DR_ID_FLAG') B3,
                        (Select *
                           From Tp_Domain_Listvalues
                          Where Domain_Code = 'DOMAIN_ALARM_OPRT_STATE') B4,
                        Net_Element C1,
                        Net_Element C2,
                        Kpi_Code_List d,
                        Manage_Region e,
                        Kpi_Mapping_Cfg f,
                        Ne_Trans_Alarm Nta,
                        (Select t.Primary_Id "$PRIMARY_ID",
                                Sum(t.Has_Read) "$HAS_READ"
                           From Tree_Privilege t
                          Where t.Tree_Cfg_Name = 'NET_ELEMENT'
                            And t.Assign_Object In ('STAFF_3', 'ORG_2', 'STATION_22')
                     Group By t.Primary_Id) "$PRI_VIEW"
             Where Nvl(a.Config_Ne_Id, a.Ne_Id) ="$PRI_VIEW"."$PRIMARY_ID"(+)
                    And Nvl("$PRI_VIEW"."$HAS_READ", 0) > 0
                    And B1.List_Value = a.Alarm_Type
                    And a.Ne_Id = C1.Ne_Id
                    And B2.List_Value = a.Alarm_State
                    And B3.List_Value = a.Dr_Id || ''
                    And B4.List_Value = a.Oprt_State
                    And a.Config_Ne_Id = C2.Ne_Id(+)
                    And a.Kpi_Id = d.Kpi_Id
                    And a.Kpi_Id = f.Kpi_Id(+)
                    And Nvl(a.Alarm_Region_Origin, '-1') =
                        To_Char(e.Region_Id(+))
                    And a.Ne_Alarm_List_Id = Nta.Ne_Alarm_List_Id(+)
                    And (Select Path || '/'
                           From Net_Element
                          Where Ne_Id = a.Ne_Id) Not Like
                        (Select Path || '/%'
                           From Net_Element
                          Where Ne_Type_Id = 30
                            And Ne_Flag = '6'
                            And State = '0SA') /*非业务系统*/
                    And To_Number(a.Dr_Id) = 0
                  Order By B2.Sort_Id,
                           B4.Sort_Id,
                           a.Alarm_Type,
                           a.Ne_Id,
                           Nvl(a.Last_Send_Time, a.Create_Time) Desc) a) b
  Where b.Sid >= 1
    And b.Sid  



ROLLINGPIG大师,我咋没把这个附件发上去啊,呵呵,现在我补上去《终极解决.txt》了,是这么写的,我把ROWNUM分页象征性的写了一下,虽然没实际用途!

[ 本帖最后由 wabjtam123 于 2010-3-16 16:27 编辑 ]

使用道具 举报

回复
认证徽章
论坛徽章:
50
2014年世界杯参赛球队: 荷兰
日期:2014-07-11 07:56:59蛋疼蛋
日期:2012-03-06 07:22:542012新春纪念徽章
日期:2012-02-13 15:09:522012新春纪念徽章
日期:2012-02-13 15:09:522012新春纪念徽章
日期:2012-02-13 15:09:522012新春纪念徽章
日期:2012-02-13 15:09:522012新春纪念徽章
日期:2012-02-13 15:09:522012新春纪念徽章
日期:2012-01-04 11:53:29蛋疼蛋
日期:2011-11-11 15:47:00ITPUB十周年纪念徽章
日期:2011-11-01 16:23:26
发表于 2010-3-16 16:33 | 显示全部楼层
原帖由 rollingpig 于 2010-3-16 16:22 发表
SELECT PERSON
FROM
TACHE WHERE FLOW_ID = :B1 AND STATE  'F'
这个SQL可能没有适当的index.
每次执行返回一行,但是每次执行500 logical read.



ROLLINGPIG大师,确实如此!
只有一个主键,就是flow_id,没用到索引,估计是认为有回表,代价会比较大?

如果建如下索引,一定最快,因为索引可以回答问题
create index idx_union on tache (flow_id,person,state)


这样建索引后,尝试一跑,代价从100降低为2了,假如投入实战收效估计相当可观,就是不了解业务对这张表的更新操作到什么程度,讨论一下再考虑是否真如此修改投放补丁。
谢谢!

[ 本帖最后由 wabjtam123 于 2010-3-16 16:37 编辑 ]

使用道具 举报

回复
论坛徽章:
17
2008新春纪念徽章
日期:2008-02-13 12:43:032014年新春福章
日期:2014-02-18 16:42:02优秀写手
日期:2013-12-18 09:29:13奥迪
日期:2013-09-12 15:57:04凯迪拉克
日期:2013-08-26 22:55:57红旗
日期:2013-08-15 13:57:06茶鸡蛋
日期:2013-05-29 11:38:412013年新春福章
日期:2013-02-25 14:51:24ITPUB季度 技术新星
日期:2012-02-16 14:53:162012新春纪念徽章
日期:2012-01-04 11:51:22
发表于 2010-3-16 16:37 | 显示全部楼层
说白了,最好的调优因该是 开发人员自己弄的

使用道具 举报

回复
论坛徽章:
136
ITPUB年度最佳技术回答奖
日期:2010-06-12 13:17:14现代
日期:2013-10-02 14:53:59路虎
日期:2013-11-22 12:26:182014年新春福章
日期:2014-02-18 16:42:02马上有房
日期:2014-02-18 16:42:02马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上加薪
日期:2014-02-19 11:55:14
发表于 2010-3-16 16:44 | 显示全部楼层

回复 #25 maclean 的帖子

不明白开发为啥非要用个函数去取名称,直接id关联一个名称表不行

使用道具 举报

回复
认证徽章
论坛徽章:
50
2014年世界杯参赛球队: 荷兰
日期:2014-07-11 07:56:59蛋疼蛋
日期:2012-03-06 07:22:542012新春纪念徽章
日期:2012-02-13 15:09:522012新春纪念徽章
日期:2012-02-13 15:09:522012新春纪念徽章
日期:2012-02-13 15:09:522012新春纪念徽章
日期:2012-02-13 15:09:522012新春纪念徽章
日期:2012-02-13 15:09:522012新春纪念徽章
日期:2012-01-04 11:53:29蛋疼蛋
日期:2011-11-11 15:47:00ITPUB十周年纪念徽章
日期:2011-11-01 16:23:26
发表于 2010-3-16 16:51 | 显示全部楼层
原帖由 棉花糖ONE 于 2010-3-16 16:44 发表
不明白开发为啥非要用个函数去取名称,直接id关联一个名称表不行

确实,这里是非常明显觉的需要改进的地方!
还有就是用逗号分割将系列值存储在字段中,然后在字段中FOR循环,感觉也不是一个好的设计思路

[ 本帖最后由 wabjtam123 于 2010-3-16 16:54 编辑 ]

使用道具 举报

回复
求职 : 数据库管理员
认证徽章
论坛徽章:
10
授权会员
日期:2005-10-30 17:05:332014年新春福章
日期:2014-02-18 16:41:112013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:03:322012新春纪念徽章
日期:2012-01-04 11:49:54ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412010新春纪念徽章
日期:2010-03-01 11:08:37会员2007贡献徽章
日期:2007-09-26 18:42:10会员2006贡献徽章
日期:2006-04-17 13:46:34马上有车
日期:2014-02-18 16:41:11
发表于 2010-3-16 17:33 | 显示全部楼层
分析的很细致、很精彩
败笔是为什么刚开始没有查到生产系统和笔记本有表的数据量不一致呢。

使用道具 举报

回复
论坛徽章:
401
紫蛋头
日期: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
发表于 2010-3-16 18:30 | 显示全部楼层
很好 做成1个word文档吧

使用道具 举报

回复
认证徽章
论坛徽章:
50
2014年世界杯参赛球队: 荷兰
日期:2014-07-11 07:56:59蛋疼蛋
日期:2012-03-06 07:22:542012新春纪念徽章
日期:2012-02-13 15:09:522012新春纪念徽章
日期:2012-02-13 15:09:522012新春纪念徽章
日期:2012-02-13 15:09:522012新春纪念徽章
日期:2012-02-13 15:09:522012新春纪念徽章
日期:2012-02-13 15:09:522012新春纪念徽章
日期:2012-01-04 11:53:29蛋疼蛋
日期:2011-11-11 15:47:00ITPUB十周年纪念徽章
日期:2011-11-01 16:23:26
发表于 2010-3-16 18:36 | 显示全部楼层
感谢ROLLINGPIG大师的指点,我把文章扩充了,补进了那条语句的优化和起到的效果

使用道具 举报

回复

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

本版积分规则 发表回复

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