互联网服务db2 9.5db2 9.7

SQL Performance 问题

有个SQL Statement的问题, 使用db2advis没有任何建议, 所有涉及的4各表都有primary key. 可是运行时间过长.select distinct  n.NOTE_AGENCY as Agency, n.DISPLAY_NOTE_TYPE_CD as NoticeType, n.NOTE_NO as NoticeNumber,       n.INFRI...显示全部
有个SQL Statement的问题, 使用db2advis没有任何建议, 所有涉及的4各表都有primary key. 可是运行时间过长.
select distinct  n.NOTE_AGENCY as Agency, n.DISPLAY_NOTE_TYPE_CD as NoticeType, n.NOTE_NO as NoticeNumber,
       n.INFRINGEMENT_TS as OffenceTime,
       date(n.CREATION_TS) as NoticeEnteringDate,
       max((case when n.UPDATED_TS >  i.UPDATED_TS then date(n.UPDATED_TS) else date(i.UPDATED_TS) end)) as UpdatingDate,
       d.DRIVERS_LICENCE_NO as LicenceNo,
       d.BIRTH_DT as DoB,
       d.GENDER_CD as Gender,
       d.IDNT_TYPE_CD as IDENTITY_TYPE,
       n.notice_id
from PIPS.NOTICE n
inner join PIPS.INFRINGEMENT i on (i.NOTICE_ID=n.NOTICE_ID)
inner join PIPS.IDENTITY d on (d.PIB_ID=n.PIB_ID)
left outer join PIPS.COURT_CASE c on (c.NOTICE_ID=i.NOTICE_ID and c.IFMT_NUMBER=i.IFMT_NUMBER)
where
          n.NOTE_TYPE_CD in (1,3,4,5,10) AND
         ( ((date(n.CREATION_TS)>'2014-08-05-00.00.00.000000') and (date(n.CREATION_TS)<='2014-08-06-00.00.00.000000')) or
          ((date(i.CREATED_TS)>'2014-08-05-00.00.00.000000') and (date(i.CREATED_TS)<='2014-08-06-00.00.00.000000')) or
          ((date(n.UPDATED_TS)>'2014-08-05-00.00.00.000000') and (date(n.UPDATED_TS)<='2014-08-06-00.00.00.000000')) or
          ((date(i.UPDATED_TS)>'2014-08-05-00.00.00.000000') and (date(i.UPDATED_TS)<='2014-08-06-00.00.00.000000')) or
          ((i.ACTION_DT>'2014-08-05-00.00.00.000000') and (i.ACTION_DT<='2014-08-06-00.00.00.000000')) or
          ((c.OUTCOME_DT>'2014-08-05-00.00.00.000000') and (c.OUTCOME_DT<='2014-08-06-00.00.00.000000')) )
         AND(i.IFMT_STATUS_CD in (1,2,3,7,8,9,10,11)
or (i.IFMT_STATUS_CD = 6 and c.outcome_type_cd = 26 )
or (i.IFMT_STATUS_CD in (4, 5) and ( c.outcome_type_cd is null or c.outcome_type_cd in (6,17,18,26,38,39)))
    )
AND n.NOTE_TYPE_CD not in(8, 9)
and n.note_status_cd > 0
    group by n.notice_id, NOTE_AGENCY, n.DISPLAY_NOTE_TYPE_CD, note_no,INFRINGEMENT_TS,n.CREATION_TS,d.DRIVERS_LICENCE_NO,d.BIRTH_DT,d.GENDER_CD,d.IDNT_TYPE_CD;

使用db2expln后, 确实用的是TABLE SCAN, 所以建了几个另外的index, 建完index后access plan也确实走了INDEX SCAN, 但是时间还是老样子! A/P请参见两个附件

ape_2.bmp



下面是几个INDEX
CREATE UNIQUE INDEX "PIPS    "."XP1_INFRINGEMENT" ON "PIPS    "."INFRINGEMENT"
                ("NOTICE_ID" ASC,
                 "IFMT_NUMBER" ASC) INCLUDE
                ("UPDATED_TS" ASC,
                "CREATED_TS" ASC,
                "ACTION_DT" ASC,
                "IFMT_STATUS_CD" ASC)
                ALLOW REVERSE SCANS;

CREATE UNIQUE INDEX "PIPS    "."XP1_IDENTITY" ON "PIPS    "."IDENTITY"
                ("PIB_ID" ASC)
                INCLUDE ("DRIVERS_LICENCE_NO" ASC,
                "BIRTH_DT" ASC,
                "GENDER_CD" ASC,
                "IDNT_TYPE_CD" ASC)
                ALLOW REVERSE SCANS;

drop index pips.XP1_IDENTITY;
CREATE UNIQUE INDEX "PIPS    "."XP2_IDENTITY" ON "PIPS    "."IDENTITY"
                ("PIB_ID" ASC,
                "DRIVERS_LICENCE_NO" ASC,
                "BIRTH_DT" ASC,
                "GENDER_CD" ASC,
                "IDNT_TYPE_CD" ASC
                )
                ALLOW REVERSE SCANS;


CREATE UNIQUE INDEX "PIPS    "."XP1_NOTICE" ON "PIPS    "."NOTICE"
                ("NOTICE_ID" ASC)
                INCLUDE (
                 "NOTE_AGENCY"             ASC,
                 "DISPLAY_NOTE_TYPE_CD"    ASC,
                 "NOTE_NO"                 ASC,
                 "INFRINGEMENT_TS"         ASC,
                 "CREATION_TS"             ASC,
                 "UPDATED_TS"              ASC,
                 "PIB_ID"                  ASC,
                 "NOTE_TYPE_CD"            ASC,
                 "NOTE_STATUS_CD"          ASC)
                ALLOW REVERSE SCANS;

CREATE UNIQUE INDEX "PIPS    "."XP1_COURT_CASE" ON "PIPS    "."COURT_CASE"
                ("NOTICE_ID" ASC,
                 "IFMT_NUMBER" ASC)
                INCLUDE (
                "OUTCOME_DT" ASC,
                "OUTCOME_TYPE_CD" ASC)
                ALLOW REVERSE SCANS;
DROP INDEX PIPS.XP1_COURT_CASE;
CREATE INDEX "PIPS    "."XP2_COURT_CASE" ON "PIPS    "."COURT_CASE"
                ("OUTCOME_DT" ASC)
                ALLOW REVERSE SCANS;
CREATE INDEX "PIPS    "."XP3_COURT_CASE" ON "PIPS    "."COURT_CASE"
                ("OUTCOME_TYPE_CD" ASC)
                ALLOW REVERSE SCANS;



runstats on TABLE "PIPS    "."INFRINGEMENT"  with distribution and detailed index all;
runstats on TABLE "PIPS    "."IDENTITY"  with distribution and detailed index all;
runstats on TABLE "PIPS    "."NOTICE"  with distribution and detailed index all;
runstats on TABLE "PIPS    "."COURT_CASE"  with distribution and detailed index all;收起
参与23

查看其它 21 个回答baowei1003的回答

baowei1003baowei1003软件开发工程师天逸金融
学习一下,
银行 · 2014-09-29
浏览1737

回答者

baowei1003
软件开发工程师天逸金融

baowei1003 最近回答过的问题

回答状态

  • 发布时间:2014-09-29
  • 关注会员:1 人
  • 回答浏览:1737
  • X社区推广