您的位置:首页 > 数据库 > Oracle

【ORACLE】在结果集字段中只有一列要使用组函数MAX,使用GROUP BY效率并不是最高的。

2010-12-04 18:59 281 查看
原SQL如下,效率低的让人不能忍受,然后就在想有没有其它变通的方式:

SELECT MAX(C.INVDATE), D.HAIER_YEAR, D.HAIER_SWEEK_TO_YEAR, C.GOODS_ID FROM ECC_OMS.V_TJ_STOCK C, ECC_OMS.DATE_WEEK_YEAR D WHERE C.INVDATE = D.SDATE GROUP BY D.HAIER_YEAR, D.HAIER_SWEEK_TO_YEAR, C.GOODS_ID

执行计划如下:

SELECT STATEMENT, GOAL = ALL_ROWS 13641 651105 21486465

HASH GROUP BY 13641 651105 21486465

HASH JOIN 6580 1026081 33860673

TABLE ACCESS FULL ECC_OMS DATE_WEEK_YEAR 5 2397 35955

TABLE ACCESS FULL ECC_OMS V_TJ_STOCK 6563 1026081 18469458

想了一会,试着用ORDER BY DESC和ROWNUM=1变通一下:

SELECT C.INVDATE, D.HAIER_YEAR, D.HAIER_SWEEK_TO_YEAR, C.GOODS_ID FROM ECC_OMS.V_TJ_STOCK C, ECC_OMS.DATE_WEEK_YEAR D WHERE C.INVDATE = D.SDATE AND ROWNUM = 1 ORDER BY C.INVDATE DESC

执行计划如下:

SELECT STATEMENT, GOAL = ALL_ROWS 3 1 33

COUNT STOPKEY

NESTED LOOPS 3 1 33

TABLE ACCESS BY INDEX ROWID ECC_OMS V_TJ_STOCK 2 1026081 18469458

INDEX FULL SCAN DESCENDING ECC_OMS V_TJ_STOCK_IDX01 2 1

TABLE ACCESS BY INDEX ROWID ECC_OMS DATE_WEEK_YEAR 1 1 15

INDEX UNIQUE SCAN ECC_OMS DATE_WEEK_YEAR 1 1

请各位大侠指教。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐