请教!下面这个SQL语句该建立怎样的索引?

上一篇 / 下一篇  2008-08-03 10:39:08 / 个人分类:IT

查看( 150 ) / 评论( 15 )
数据库:9207
操作系统:AIX 5.3
OE_ORDER_HEADERS_ALL    53,752 行数据
OE_ORDER_LINES_ALL         560,136 行数据

SELECT ROUND(NVL(SUM(DECODE(OTL.NAME,
                            '镸-^@M-^@璐ц-^L',
                            -1,
                            '镸-^@M-^@绁ㄨ-^L',
                            -1,
                            1) * OOLA.ORDERED_QUANTITY *
                     OOLA.UNIT_SELLING_PRICE),
                 0) / 10000,
             4)
  FROM OE_ORDER_HEADERS_ALL        OOHA,
       OE_ORDER_LINES_ALL          OOLA,
       APPS.OE_LOOKUPS             OL,
       ONT.OE_TRANSACTION_TYPES_TL OTL
WHERE
DECODE(:B6, NULL, '1', CUX_OM_COMMON_PKG.GET_CHANNEL(OL.MEANING, 1, 1)) >=
NVL(:B6, '1')
AND DECODE(:B5, NULL, '1', CUX_OM_COMMON_PKG.GET_CHANNEL(OL.MEANING, 1, 1)) <=
NVL(:B5, '1')
AND DECODE(:B4, NULL, '1', CUX_OM_COMMON_PKG.GET_CHANNEL(OL.MEANING, 2, 1)) >=
NVL(:B4, '1')
AND DECODE(:B3, NULL, '1', CUX_OM_COMMON_PKG.GET_CHANNEL(OL.MEANING, 2, 1)) <=
NVL(:B3, '1')
AND DECODE(:B2, NULL, '1', CUX_OM_COMMON_PKG.GET_CHANNEL(OL.MEANING, 3, 1)) >=
NVL(:B2, '1')
AND DECODE(:B1, NULL, '1', CUX_OM_COMMON_PKG.GET_CHANNEL(OL.MEANING, 3, 1)) <=
NVL(:B1, '1')
AND OOLA.FLOW_STATUS_CODE NOT IN ('ENTERED', 'CANCELLED')
AND SYSDATE BETWEEN NVL(OL.START_DATE_ACTIVE, SYSDATE) AND
NVL(OL.END_DATE_ACTIVE, SYSDATE)
AND TO_NUMBER(DECODE(:B9,
                  '1',
                  SUBSTR(OOHA.ATTRIBUTE9, 6, 2),
                  '2',
                  TO_CHAR(OOHA.ORDERED_DATE, 'MM'),
                  '3',
                  TO_CHAR(OOHA.CREATION_DATE, 'MM'),
                  '4',
                  TO_CHAR(OOLA.REQUEST_DATE, 'mm'))) = :B8
AND TO_NUMBER(DECODE(:B9,
                  '1',
                  SUBSTR(OOHA.ATTRIBUTE9, 6, 2),
                  '2',
                  TO_CHAR(OOHA.ORDERED_DATE, 'MM'),
                  '3',
                  TO_CHAR(OOHA.CREATION_DATE, 'MM'),
                  '4',
                  TO_CHAR(OOLA.REQUEST_DATE, 'mm'))) = :B8
AND DECODE(:B9,
        '1',
        SUBSTR(OOHA.ATTRIBUTE9, 1, 4),
        '2',
        TO_CHAR(OOHA.ORDERED_DATE, 'YYYY'),
        '3',
        TO_CHAR(OOHA.CREATION_DATE, 'YYYY'),
        '4',
        TO_CHAR(OOLA.REQUEST_DATE, 'yyyy')) = TO_CHAR(:B10)
AND OOHA.HEADER_ID = OOLA.HEADER_ID
AND OL.LOOKUP_CODE = :B7
AND OL.LOOKUP_CODE = :B7
AND OL.LOOKUP_CODE = OOHA.SALES_CHANNEL_CODE
AND OTL.TRANSACTION_TYPE_ID = OOLA.LINE_TYPE_ID
AND OL.ENABLED_FLAG = 'Y'
AND OL.LOOKUP_TYPE = 'SALES_CHANNEL'
AND OTL.LANGUAGE = USERENV('LANG')
AND OOHA.ORDER_TYPE_ID = :B11
AND (TO_CHAR(OOHA.ORDERED_DATE, 'YYYY') = TO_CHAR(:B10) OR
  (OOHA.ORDER_TYPE_ID = 1009 AND :B9 = 4))

SQL解释如下:
SELECT STATEMENT, GOAL = CHOOSE                        358        1        158        358               
SORT AGGREGATE                                1        158                       
  NESTED LOOPS                        358        1        158        358               
   NESTED LOOPS                        357        1        136        357               
    NESTED LOOPS                        352        1        105        352               
     TABLE ACCESS BY INDEX ROWID        APPLSYS        FND_LOOKUP_VALUES        3        1        68        3               
      INDEX UNIQUE SCAN        APPLSYS        FND_LOOKUP_VALUES_U1        2        1                2               
     TABLE ACCESS FULL        ONT        OE_ORDER_HEADERS_ALL        349        1        37        349               
    TABLE ACCESS BY INDEX ROWID        ONT        OE_ORDER_LINES_ALL        5        1        31        5               
     INDEX RANGE SCAN        ONT        OE_ORDER_LINES_N1        2        10                2               
   TABLE ACCESS BY INDEX ROWID        ONT        OE_TRANSACTION_TYPES_TL        1        1        22        1               
    INDEX UNIQUE SCAN        ONT        OE_TRANSACTION_TYPES_TL_U1                1                               
建立的索引有:

------OE_ORDER_LINES_ALL的索引:

create index ONT.OE_ORDER_LINES_N1 on ONT.OE_ORDER_LINES_ALL (HEADER_ID)
  tablespace APPS_TS_TX_IDX
  pctfree 10
  initrans 11
  maxtrans 255
  storage
  (
    initial 128K
    next 128K
    minextents 1
    maxextents unlimited
    pctincrease 0
  );

-----OE_ORDER_HEADERS_ALL的索引

create unique index ONT.OE_ORDER_HEADERS_U1 on ONT.OE_ORDER_HEADERS_ALL (HEADER_ID)
  tablespace APPS_TS_TX_IDX
  pctfree 10
  initrans 11
  maxtrans 255
  storage
  (
    initial 128K
    next 128K
    minextents 1
    maxextents unlimited
    pctincrease 0
  );

create index ONT.OE_ORDER_HEADERS_N99 on ONT.OE_ORDER_HEADERS_ALL (TO_CHAR(ORDERED_DATE,'YYYY'))
  tablespace APPS_TS_TX_IDX
  pctfree 10
  initrans 2
  maxtrans 255
  storage
  (
    initial 128K
    next 128K
    minextents 1
    maxextents unlimited
    pctincrease 0
  );

create index ONT.OE_ORDER_HEADERS_N9 on ONT.OE_ORDER_HEADERS_ALL (QUOTE_NUMBER, ORDER_TYPE_ID)
  tablespace APPS_TS_TX_IDX
  pctfree 10
  initrans 11
  maxtrans 255
  storage
  (
    initial 128K
    next 128K
    minextents 1
    maxextents unlimited
    pctincrease 0
  );

------OE_TRANSACTION_TYPES_TL的索引

create unique index ONT.OE_TRANSACTION_TYPES_TL_U1 on ONT.OE_TRANSACTION_TYPES_TL (TRANSACTION_TYPE_ID, LANGUAGE)
  tablespace APPS_TS_SEED
  pctfree 10
  initrans 11
  maxtrans 255
  storage
  (
    initial 128K
    next 128K
    minextents 1
    maxextents unlimited
    pctincrease 0
  );

希望前辈指点一二,谢谢了!

TAG:

zergduan的个人空间 zergduan 发布于2008-08-03 16:52:57
枪毙~
clinglei的个人空间 clinglei 发布于2008-08-03 19:47:02
............
mychary的个人空间 mychary 发布于2008-08-03 20:50:50
感觉那逻辑有点复杂,估计是分析设计有问题,where后面有些不好理解
football2006发布于2008-08-03 20:55:17
看起来好累
oradbHome oradbHome 发布于2008-08-03 21:04:19
看看有没有选择性很高的列.在其上面建立 index  .

然后TABLE ACCESS BY ROWID 去返回数据.
zergduan的个人空间 zergduan 发布于2008-08-04 10:54:32
顶一顶,看看大家的意见~我是不会调~
yxxiao的个人空间 yxxiao 发布于2008-08-04 11:14:30
樓主的建表SQL,去談INDEX,沒意義.
因為你用了TO_CHAR去建表,當你再SELECT此表時,系統會SKIP INDEX的.
因此,無法幫你談INDEX.
clinglei的个人空间 clinglei 发布于2008-08-05 14:05:59
正在学习有关INDEX的东西……
sunchao的个人空间 sunchao 发布于2008-08-05 15:09:36
比较强悍啊
rollingpig的个人空间 rollingpig 发布于2008-08-05 15:20:24
如果我底下的程序员写出这种SQL,直接让他走人
专注 - 思考 - 创新 owlstudio 发布于2008-08-05 17:03:01

QUOTE:

原帖由 rollingpig 于 2008-8-5 15:20 发表
如果我底下的程序员写出这种SQL,直接让他走人
版主够狠!
clinglei的个人空间 clinglei 发布于2008-08-06 13:44:30
请教版主,这些SQL有哪些问题?
对于这个SQL语句,我有点看不懂,但是,这些是负责我们公司开发的人写的,也不敢乱改。。。
只当学习了吧
zergduan的个人空间 zergduan 发布于2008-08-06 13:48:19

QUOTE:

原帖由 owlstudio 于 2008-8-5 17:03 发表


版主够狠!
够仁慈的了,我想枪毙他
clinglei的个人空间 clinglei 发布于2008-08-08 14:59:38
呵呵,以后最好能有机会去版主手下干活
whmng发布于2008-08-09 09:38:22
可以加hint 用 OE_ORDER_HEADERS_U1 试试。
还有这个条件好像出现重复了
AND TO_NUMBER(DECODE(:B9,
                  '1',
                  SUBSTR(OOHA.ATTRIBUTE9, 6, 2),
                  '2',
                  TO_CHAR(OOHA.ORDERED_DATE, 'MM'),
                  '3',
                  TO_CHAR(OOHA.CREATION_DATE, 'MM'),
                  '4',
                  TO_CHAR(OOLA.REQUEST_DATE, 'mm'))) = :B8
AND TO_NUMBER(DECODE(:B9,
                  '1',
                  SUBSTR(OOHA.ATTRIBUTE9, 6, 2),
                  '2',
                  TO_CHAR(OOHA.ORDERED_DATE, 'MM'),
                  '3',
                  TO_CHAR(OOHA.CREATION_DATE, 'MM'),
                  '4',
                  TO_CHAR(OOLA.REQUEST_DATE, 'mm'))) = :B8
我来说两句

(可选)

我的栏目

日历

« 2008-12-02  
 123456
78910111213
14151617181920
21222324252627
28293031   

数据统计

  • 访问量: 107
  • 日志数: 5
  • 建立时间: 2008-03-05
  • 更新时间: 2008-11-24

RSS订阅

Open Toolbar