楼主: myfriend2010

这个sql怎么优化!

[复制链接]
招聘 : Linux运维
论坛徽章:
235
紫蜘蛛
日期:2007-09-26 17:05:46玉兔
日期:2007-09-26 17:05:05现任管理团队成员
日期:2011-05-07 01:45:08玉兔
日期:2006-08-29 20:38:48紫蜘蛛
日期:2007-09-26 17:05:34阿斯顿马丁
日期:2013-11-19 10:38:16奔驰
日期:2013-10-16 09:08:58红旗
日期:2014-01-09 11:57:39路虎
日期:2013-08-13 14:52:35林肯
日期:2015-05-19 13:01:16
11#
 楼主| 发表于 2008-5-6 08:53 | 只看该作者
==测试下!

原帖由 wangzhonnew 于 2008-5-5 23:28 发表
q: Q3的USEE8_TIME+CUST_ID换成CUST_ID+USEE8_TIME会怎么样?
a: it will be completely different if you change the order... i suppose it will pick the index....

actually it may worth to also create a index CUST_ID+USEE8_TIME, i'm not sure which will be better in this situation, maybe running a db2advis is a good idea

使用道具 举报

回复
招聘 : Linux运维
论坛徽章:
235
紫蜘蛛
日期:2007-09-26 17:05:46玉兔
日期:2007-09-26 17:05:05现任管理团队成员
日期:2011-05-07 01:45:08玉兔
日期:2006-08-29 20:38:48紫蜘蛛
日期:2007-09-26 17:05:34阿斯顿马丁
日期:2013-11-19 10:38:16奔驰
日期:2013-10-16 09:08:58红旗
日期:2014-01-09 11:57:39路虎
日期:2013-08-13 14:52:35林肯
日期:2015-05-19 13:01:16
12#
 楼主| 发表于 2008-5-6 09:38 | 只看该作者
月表的DDL

CREATE TABLE CCP.CUST_BILLSUM_yyyymm
(CUST_ID          DECIMAL(16, 0),
  STAT_MONTH       VARCHAR(6),
  INSTORAGE_DAY    TIMESTAMP,
  CITY_CODE        INTEGER,
  AREA_CODE        DECIMAL(6, 0),
  INNET_TIME       TIMESTAMP,
  STRA_FLAG        VARCHAR(2),
  TELE_EMP_FLAG    VARCHAR(2),
  CUST_NAME        VARCHAR(500),
  ACC_NBR          VARCHAR(24),
  CONTACT_NBR      VARCHAR(50),
  OFFER_NAME       VARCHAR(500),
  EFF_TIME         VARCHAR(100),
  BRAND_NAME       VARCHAR(100),
  PHS_FLAG         INTEGER,
  TEL_FLAG         INTEGER,
  XKT_FLAG         INTEGER,
  LAN_FLAG         INTEGER,
  ADSL_FLAG        INTEGER,
  VDSL_FLAG        INTEGER,
  IPTV_FLAG        INTEGER,
  OTH_FLAG         INTEGER,
  PRE_FEE          DECIMAL(16, 2),
  POST_FEE         DECIMAL(16, 2),
  TOTAL_COUNT      DECIMAL(16, 0),
  CHARGE_LEN       DECIMAL(16, 0),
  PRE_RENT         DECIMAL(16, 2),
  POST_RENT        DECIMAL(16, 2),
  PRE_LOC          DECIMAL(16, 2),
  POST_LOC         DECIMAL(16, 2),
  COUNT_LOC        DECIMAL(16, 0),
  CHARLEN_LOC      DECIMAL(16, 0),
  PRE_NET          DECIMAL(16, 2),
  POST_NET         DECIMAL(16, 2),
  COUNT_NET        DECIMAL(16, 0),
  CHARLEN_NET      DECIMAL(16, 0),
  PRE_TRATOLL      DECIMAL(16, 2),
  POST_TRATOLL     DECIMAL(16, 2),
  COUNT_TRATOLL    DECIMAL(16, 0),
  CHARLEN_TRATOLL  DECIMAL(16, 0),
  PRE_17909        DECIMAL(16, 2),
  POST_17909       DECIMAL(16, 2),
  COUNT_17909      DECIMAL(16, 0),
  CHARLEN_17909    DECIMAL(16, 0),
  PRE_11808        DECIMAL(16, 2),
  POST_11808       DECIMAL(16, 2),
  COUNT_11808      DECIMAL(16, 0),
  CHARLEN_11808    DECIMAL(16, 0),
  PRE_INTERGAT     DECIMAL(16, 2),
  POST_INTERGAT    DECIMAL(16, 2),
  COUNT_INTERGAT   DECIMAL(16, 0),
  CHARLEN_INTERGAT DECIMAL(16, 0),
  PRE_NARBAND      DECIMAL(16, 2),
  POST_NARBAND     DECIMAL(16, 2),
  COUNT_NARBAND    DECIMAL(16, 0),
  CHARLEN_NARBAND  DECIMAL(16, 0),
  PRE_BROBAND      DECIMAL(16, 2),
  POST_BROBAND     DECIMAL(16, 2),
  COUNT_BROBAND    DECIMAL(16, 0),
  CHARLEN_BROBAND  DECIMAL(16, 0),
  PRE_VIEW         DECIMAL(16, 2),
  POST_VIEW        DECIMAL(16, 2),
  PRE_CALLSHOW     DECIMAL(16, 2),
  POST_CALLSHOW    DECIMAL(16, 2),
  PRE_SMS          DECIMAL(16, 2),
  POST_SMS         DECIMAL(16, 2),
  COUNT_SMS        DECIMAL(16, 0),
  PRE_SPSMS        DECIMAL(16, 2),
  POST_SPSMS       DECIMAL(16, 2),
  COUNT_SPSMS      DECIMAL(16, 0),
  PREFUN_CRING     DECIMAL(16, 2),
  POSTFUN_CRING    DECIMAL(16, 2),
  PREINF_CRING     DECIMAL(16, 2),
  POSTINF_CRING    DECIMAL(16, 2),
  COUNT_CRING      DECIMAL(16, 0),
  PREOTH_CRING     DECIMAL(16, 2),
  POSTOTH_CRING    DECIMAL(16, 2),
  PRE_COMMAJ       DECIMAL(16, 2),
  POST_COMMAJ      DECIMAL(16, 2),
  PRE_SAFNET       DECIMAL(16, 2),
  POST_SAFNET      DECIMAL(16, 2),
  PRE_OTHADD       DECIMAL(16, 2),
  POST_OTHADD      DECIMAL(16, 2),
  PRE_ANYCALL      DECIMAL(16, 2),
  POST_ANYCALL     DECIMAL(16, 2),
  PRE_OTH          DECIMAL(16, 2),
  POST_OTH         DECIMAL(16, 2),
  FREE_FEE         DECIMAL(16, 2),
  NOPAY_FEE        DECIMAL(16, 2),
  USEE8_TIME       TIMESTAMP
)
  DATA CAPTURE NONE
IN CCP
  PARTITIONING KEY
   (CUST_ID
   ) USING HASHING;

ALTER TABLE CCP.CUST_BILLSUM
  LOCKSIZE ROW
  APPEND OFF
  NOT VOLATILE
  LOG INDEX BUILD NULL;

使用道具 举报

回复
招聘 : Linux运维
论坛徽章:
235
紫蜘蛛
日期:2007-09-26 17:05:46玉兔
日期:2007-09-26 17:05:05现任管理团队成员
日期:2011-05-07 01:45:08玉兔
日期:2006-08-29 20:38:48紫蜘蛛
日期:2007-09-26 17:05:34阿斯顿马丁
日期:2013-11-19 10:38:16奔驰
日期:2013-10-16 09:08:58红旗
日期:2014-01-09 11:57:39路虎
日期:2013-08-13 14:52:35林肯
日期:2015-05-19 13:01:16
13#
 楼主| 发表于 2008-5-6 10:31 | 只看该作者
还是不理想,仍就走了全表扫描!

index脚本如下:
CREATE UNIQUE INDEX CCP.IDX_CBSUM_CU_0802
  ON "CCP"."CUST_BILLSUM_200802"
("USEE8_TIME" ASC,
  "CUST_ID"    ASC
);
commit;

RUNSTATS ON TABLE CCP.CUST_BILLSUM_200802
  FOR INDEX CCP.IDX_CBSUM_CU_0802
  SHRLEVEL REFERENCE;

commit;

CREATE UNIQUE INDEX CCP.IDX_CBSUM_C_0801
  ON "CCP"."CUST_BILLSUM_200801"
("CUST_ID"    ASC
);
commit;

RUNSTATS ON TABLE CCP.CUST_BILLSUM_200801
  FOR INDEX CCP.IDX_CBSUM_C_0801
  SHRLEVEL REFERENCE;

commit;

CREATE UNIQUE INDEX CCP.IDX_CBSUM_C_0712
  ON "CCP"."CUST_BILLSUM_200712"
("CUST_ID"    ASC
);
commit;

RUNSTATS ON TABLE CCP.CUST_BILLSUM_200712
  FOR INDEX CCP.IDX_CBSUM_C_0712
  SHRLEVEL REFERENCE;

commit;

使用道具 举报

回复
招聘 : Linux运维
论坛徽章:
235
紫蜘蛛
日期:2007-09-26 17:05:46玉兔
日期:2007-09-26 17:05:05现任管理团队成员
日期:2011-05-07 01:45:08玉兔
日期:2006-08-29 20:38:48紫蜘蛛
日期:2007-09-26 17:05:34阿斯顿马丁
日期:2013-11-19 10:38:16奔驰
日期:2013-10-16 09:08:58红旗
日期:2014-01-09 11:57:39路虎
日期:2013-08-13 14:52:35林肯
日期:2015-05-19 13:01:16
14#
 楼主| 发表于 2008-5-6 10:33 | 只看该作者
执行结果如下:

zxt.txt

101.05 KB, 下载次数: 11

使用道具 举报

回复
招聘 : c/c++研发
论坛徽章:
45
技术图书徽章
日期:2014-03-10 14:09:192012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-01-04 11:51:22ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15现任管理团队成员
日期:2011-05-07 01:45:082011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:41:50
15#
发表于 2008-5-6 11:26 | 只看该作者
what suggestion given by db2advis?

使用道具 举报

回复
招聘 : Linux运维
论坛徽章:
235
紫蜘蛛
日期:2007-09-26 17:05:46玉兔
日期:2007-09-26 17:05:05现任管理团队成员
日期:2011-05-07 01:45:08玉兔
日期:2006-08-29 20:38:48紫蜘蛛
日期:2007-09-26 17:05:34阿斯顿马丁
日期:2013-11-19 10:38:16奔驰
日期:2013-10-16 09:08:58红旗
日期:2014-01-09 11:57:39路虎
日期:2013-08-13 14:52:35林肯
日期:2015-05-19 13:01:16
16#
 楼主| 发表于 2008-5-6 11:40 | 只看该作者
C:Program FilesIBMSQLLIBBIN>db2advis -d dw -i c:        .sql

将用户标识用作缺省模式名称。使用 -n 选项来指定模式
在时间戳记 2008-05-06-11.27.24.140000 时开始执行
从输入文件中找到 [1] SQL 语句
正在建议索引...
  0  当前解决方案中的索引数
[20957956.0000] timeron(没有建议)
[20957956.0000] timeron(对于当前解决方案)
[0.00%] 提高


--
--
-- 建议的索引列表
-- ===========================
--  未对此工作负载建议任何索引。


--
--
-- RECOMMENDED EXISTING INDEXES
-- ============================


--
--
-- UNUSED EXISTING INDEXES
-- ============================
-- DROP INDEX "CCP     "."IDX_CBSUM_C_0712";
-- DROP INDEX "CCP     "."I_C_BILLSUM_200803";
-- DROP INDEX "CCP     "."CUST_CCP709_IDMCLV";
-- DROP INDEX "CCP     "."CUST_CCP712_IDMCLV";
-- DROP INDEX "CCP     "."CUST_CCP801_IDMCLV";
-- DROP INDEX "CCP     "."CUST_CCP802_IDMCLV";
-- DROP INDEX "CCP     "."CUST_CCP803_IDMCLV";
-- DROP INDEX "CCP     "."CUST_CHURN_USE_S";
-- DROP INDEX "CCP     "."CUST_CHURN_REGTY";
-- DROP INDEX "CCP     "."CUST_CHURN10_REGTY";
-- DROP INDEX "CCP     "."CUST_CHURN10_USE_S";
-- DROP INDEX "CCP     "."CUST_CHURN12_REGTY";
-- DROP INDEX "CCP     "."CUST_CHURN12_USE_S";
-- DROP INDEX "CCP     "."CUST_CHUR801_REGTY";
-- DROP INDEX "CCP     "."CUST_CHUR801_USE_S";
-- DROP INDEX "CCP     "."CUST_CHUR803_REGTY";
-- DROP INDEX "CCP     "."CUST_CHUR803_USE_S";
-- DROP INDEX "CCP     "."CUST_F0801_I1";
-- DROP INDEX "DB2ADMIN"."IDX_CUST_GRP_REG";
-- DROP INDEX "CCP     "."CUST_GROUP_TAB_MOD";
-- DROP INDEX "CCP     "."V_CUST_VALUE_T287";
-- DROP INDEX "DALI    "."TEST_INDEX_I";
-- DROP INDEX "DALI    "."TEST_INDEX_ID";
-- DROP INDEX "DB2ADMIN"."P_OFR_PRD_ATOM";
-- DROP INDEX "DB2ADMIN"."OFR_PRD_INST_MAIN";
-- DROP INDEX "QUEST   "."TS_KEYS";
-- DROP INDEX "TEL     "."IND_CUST_GCONT";
-- DROP INDEX "TEL     "."IDX_FOII_REG_C";
-- DROP INDEX "TEL     "."IDX_OPIM_REGION_C";
-- DROP INDEX "TEL     "."IDX_PARC_REG_C";
-- DROP INDEX "TEL     "."IDX_TJ_BTID";
-- DROP INDEX "CCP     "."IDX_CBSUM_C_0801";
-- DROP INDEX "CCP     "."IDX_CBSUM_CU_0802";
-- DROP INDEX "CCP     "."CUST_CCP710_IDMCLV";
-- DROP INDEX "CCP     "."CUST_CCP711_IDMCLV";
-- DROP INDEX "CCP     "."CUST_CHURN09_REGTY";
-- DROP INDEX "CCP     "."CUST_CHURN09_USE_S";
-- DROP INDEX "CCP     "."CUST_CHURN11_REGTY";
-- DROP INDEX "CCP     "."CUST_CHURN11_USE_S";
-- DROP INDEX "CCP     "."CUST_CHUR802_REGTY";
-- DROP INDEX "CCP     "."CUST_CHUR802_USE_S";
-- DROP INDEX "CCP     "."V_CUST_VALUE_T288";
-- DROP INDEX "CCP     "."V_CUST_VALUE_T289";
-- DROP INDEX "CCP     "."V_CUST_VALUE_T290";
-- DROP INDEX "CCP     "."IBM01";
-- DROP INDEX "CCP     "."IBM24";
-- DROP INDEX "DB2ADMIN"."PK_BRAND";
-- DROP INDEX "DB2ADMIN"."SQL070918141325480";
-- DROP INDEX "DB2ADMIN"."CUST_ID_IDX2";
-- DROP INDEX "QUEST   "."QCOBLST_REPO045_IX";
-- DROP INDEX "QUEST   "."QCOBLST_STMT045_IX";
-- DROP INDEX "QUEST   "."QCREPORT_DET_IX";
-- DROP INDEX "QUEST   "."QCREPORT_REPO_IX";
-- DROP INDEX "QUEST   "."IX_KEYS";
-- DROP INDEX "QUEST   "."TB_KEYS";
-- DROP INDEX "TEL     "."IDX_FPII_REG_C";
-- DROP INDEX "CCP     "."FACT_PROD_1";
-- DROP INDEX "TEL     "."IND_PROD_PRPTY";
-- DROP INDEX "TEL     "."IDX_SERV_SERVID";
-- DROP INDEX "TEL     "."SERV#L";
-- ===========================
--

顾问程序已经评估了 0 个解决方案
“DB2 工作负载性能顾问程序”工具已结束。

使用道具 举报

回复
招聘 : c/c++研发
论坛徽章:
45
技术图书徽章
日期:2014-03-10 14:09:192012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-01-04 11:51:22ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15现任管理团队成员
日期:2011-05-07 01:45:082011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:41:50
17#
发表于 2008-5-6 11:47 | 只看该作者
用optlevel=0看看出来的访问计划是什么样子,看看如果用索引的开销是多少?
个人感觉SORT被低估了,你们的SORTHEAP只有1555,应该会发生很多sort overflow的

使用道具 举报

回复
招聘 : c/c++研发
论坛徽章:
45
技术图书徽章
日期:2014-03-10 14:09:192012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-01-04 11:51:22ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15现任管理团队成员
日期:2011-05-07 01:45:082011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:41:50
18#
发表于 2008-5-6 11:51 | 只看该作者
还有别忘了每次db2exfmt之前要flush package cache

使用道具 举报

回复
招聘 : Linux运维
论坛徽章:
235
紫蜘蛛
日期:2007-09-26 17:05:46玉兔
日期:2007-09-26 17:05:05现任管理团队成员
日期:2011-05-07 01:45:08玉兔
日期:2006-08-29 20:38:48紫蜘蛛
日期:2007-09-26 17:05:34阿斯顿马丁
日期:2013-11-19 10:38:16奔驰
日期:2013-10-16 09:08:58红旗
日期:2014-01-09 11:57:39路虎
日期:2013-08-13 14:52:35林肯
日期:2015-05-19 13:01:16
19#
 楼主| 发表于 2008-5-6 11:58 | 只看该作者
优化级别为0以后,确实走索引了! 不过看样子效果还是不佳

看执行计划....

zxt.txt

60.54 KB, 下载次数: 7

使用道具 举报

回复
招聘 : Linux运维
论坛徽章:
235
紫蜘蛛
日期:2007-09-26 17:05:46玉兔
日期:2007-09-26 17:05:05现任管理团队成员
日期:2011-05-07 01:45:08玉兔
日期:2006-08-29 20:38:48紫蜘蛛
日期:2007-09-26 17:05:34阿斯顿马丁
日期:2013-11-19 10:38:16奔驰
日期:2013-10-16 09:08:58红旗
日期:2014-01-09 11:57:39路虎
日期:2013-08-13 14:52:35林肯
日期:2015-05-19 13:01:16
20#
 楼主| 发表于 2008-5-6 12:03 | 只看该作者
恩,我觉得也是SORTHEAP太小了,导致写入磁盘了..

不过这个SORTHEAP是DB2配置顾问程序给的建议...不曾改动过

其实上周和大菠萝讨论过是否可以同时增加SHEAPTHRES和SORTHEAP2个参数的值,但未果!呵呵
个人感觉SORT被低估了,你们的SORTHEAP只有1555,应该会发生很多sort overflow的

使用道具 举报

回复

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

本版积分规则 发表回复

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