壹佰网|ERP100 - 企业信息化知识门户

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2830|回复: 20

有哪位高手能幫我优化一下該sql

[复制链接]
发表于 2007/6/18 17:07:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。如果您注册时有任何问题请联系客服QQ: 83569622  。

您需要 登录 才可以下载或查看,没有帐号?注册

x
sql 1
SELECT
0 primary_quantity,
0 transaction_quantity,
(SUM(NVL(DECODE(TRUNC(MONTHS_BETWEEN(trunc(吐舌_as_of_date),TRUNC(MMT1.TRANSACTION_DATE))),
0,MMT1.SP_QTY,
1,MMT1.SP_QTY,
2,MMT1.SP_QTY,0),0))) F1T3_QTY,
(SUM(NVL(DECODE(TRUNC(MONTHS_BETWEEN(trunc(吐舌_as_of_date),TRUNC(MMT1.TRANSACTION_DATE))),
3,MMT1.SP_QTY,
4,MMT1.SP_QTY,
5,MMT1.SP_QTY,0),0))) F4T6_QTY,
(SUM(NVL(DECODE(TRUNC(MONTHS_BETWEEN(trunc(吐舌_as_of_date),TRUNC(MMT1.TRANSACTION_DATE))),
6,MMT1.SP_QTY,
7,MMT1.SP_QTY,
8,MMT1.SP_QTY,0),0))) F7T9_QTY,
(SUM(NVL(DECODE(TRUNC(MONTHS_BETWEEN(trunc(吐舌_as_of_date),TRUNC(MMT1.TRANSACTION_DATE))),
9,MMT1.SP_QTY,
10,MMT1.SP_QTY,
11,MMT1.SP_QTY,0),0))) F10T12_QTY,
(SUM(NVL(DECODE(TRUNC(MONTHS_BETWEEN(trunc(吐舌_as_of_date),TRUNC(MMT1.TRANSACTION_DATE))),
0,0,
1,0,
2,0,
3,0,
4,0,
5,0,
6,0,
7,0,
8,0,
9,0,
10,0,
11,0,MMT1.SP_QTY),0))) OVR12_QTY,
organization_id organization_id,
inventory_item_id inventory_item_id,
subinventory_code subinventory_code
FROM
(
SELECT MMT.ORGANIZATION_ID ORGANIZATION_ID,
MMT.INVENTORY_ITEM_ID INVENTORY_ITEM_ID,
mmt.subinventory_code subinventory_code,
TRUNC(MMT.TRANSACTION_DATE) TRANSACTION_DATE,
SUM(DECODE(MMT.TRANSACTION_TYPE_ID,
2,MMT.PRIMARY_QUANTITY,
3,MMT.PRIMARY_QUANTITY,
4,MMT.PRIMARY_QUANTITY,
8,MMT.PRIMARY_QUANTITY,
12,MMT.PRIMARY_QUANTITY,
15,MMT.PRIMARY_QUANTITY,
17,MMT.PRIMARY_QUANTITY,
18,MMT.PRIMARY_QUANTITY,
36,MMT.PRIMARY_QUANTITY,
37,MMT.PRIMARY_QUANTITY,
38,MMT.PRIMARY_QUANTITY,
40,MMT.PRIMARY_QUANTITY,
41,MMT.PRIMARY_QUANTITY,
42,MMT.PRIMARY_QUANTITY,
44,MMT.PRIMARY_QUANTITY,
51,MMT.PRIMARY_QUANTITY,
70,MMT.PRIMARY_QUANTITY,
71,MMT.PRIMARY_QUANTITY,0)) SP_QTY
FROM
MTL_MATERIAL_TRANSACTIONS MMT,
MTL_SYSTEM_ITEMS MSI
WHERE MMT.ORGANIZATION_ID = MSI.ORGANIZATION_ID
AND MMT.INVENTORY_ITEM_ID = MSI.INVENTORY_ITEM_ID
AND MMT.ORGANIZATION_ID = 吐舌_org_id
AND TRUNC(MMT.TRANSACTION_DATE) <= trunc(吐舌_as_of_date)
and (mmt.transaction_type_id in (12,15,17,18,36,37,38,40,41,42,44,70,71)
or
(mmt.transaction_type_id in (2,3,4,8,51) and mmt.primary_quantity > 0))
&lp_item
GROUP BY
MMT.ORGANIZATION_ID,
MMT.INVENTORY_ITEM_ID,
mmt.subinventory_code,
MMT.TRANSACTION_DATE

) MMT1
GROUP BY
MMT1.ORGANIZATION_ID,
MMT1.INVENTORY_ITEM_ID,
mmt1.subinventory_code
UNION
SELECT sum(mmt.primary_quantity) primary_quantity,
0 transaction_quantity,
0 f1t3_qty,
0 f4t6_qty,
0 f7t9_qty,
0 f10t12_qty,
0 ovr12_qty,
mmt.organization_id organization_id,
mmt.inventory_item_id inventory_item_id,
mmt.subinventory_code subinventory_code
FROM
mtl_material_transactions mmt,
mtl_system_items msi
WHERE
mmt.subinventory_code is not null
AND mmt.inventory_item_id = msi.inventory_item_id
AND mmt.organization_id = msi.organization_id
AND trunc(mmt.transaction_date) > trunc(吐舌_as_of_date)
AND mmt.organization_id = 吐舌_org_id
and mmt.transaction_type_id not in (24,90)
&lp_item
GROUP BY
mmt.organization_id,
mmt.inventory_item_id,
mmt.subinventory_code

UNION
SELECT 0 primary_quantity,
SUM(MOQ.TRANSACTION_QUANTITY) TRANSACTION_QUANTITY,
0 f1t3_qty,
0 f4t6_qty,
0 f7t9_qty,
0 f10t12_qty,
0 ovr12_qty,
MOQ.ORGANIZATION_ID organization_id,
MOQ.INVENTORY_ITEM_ID inventory_item_id,
moq.subinventory_code subinventory_code

FROM
MTL_ONHAND_QUANTITIES MOQ,
MTL_SYSTEM_ITEMS MSI
WHERE MOQ.ORGANIZATION_ID = MSI.ORGANIZATION_ID
AND MOQ.INVENTORY_ITEM_ID = MSI.INVENTORY_ITEM_ID
AND MSI.ORGANIZATION_ID = 吐舌_org_id
&lp_item
GROUP BY
MOQ.ORGANIZATION_ID,
MOQ.INVENTORY_ITEM_ID,
moq.subinventory_code

sql 2
SELECT
0 primary_quantity,
0 transaction_quantity,
(SUM(NVL(DECODE(TRUNC(MONTHS_BETWEEN(trunc(吐舌_as_of_date),TRUNC(MMT1.TRANSACTION_DATE))),
0,MMT1.SP_QTY,
1,MMT1.SP_QTY,
2,MMT1.SP_QTY,0),0))) F1T3_QTY,
(SUM(NVL(DECODE(TRUNC(MONTHS_BETWEEN(trunc(吐舌_as_of_date),TRUNC(MMT1.TRANSACTION_DATE))),
3,MMT1.SP_QTY,
4,MMT1.SP_QTY,
5,MMT1.SP_QTY,0),0))) F4T6_QTY,
(SUM(NVL(DECODE(TRUNC(MONTHS_BETWEEN(trunc(吐舌_as_of_date),TRUNC(MMT1.TRANSACTION_DATE))),
6,MMT1.SP_QTY,
7,MMT1.SP_QTY,
8,MMT1.SP_QTY,0),0))) F7T9_QTY,
(SUM(NVL(DECODE(TRUNC(MONTHS_BETWEEN(trunc(吐舌_as_of_date),TRUNC(MMT1.TRANSACTION_DATE))),
9,MMT1.SP_QTY,
10,MMT1.SP_QTY,
11,MMT1.SP_QTY,0),0))) F10T12_QTY,
(SUM(NVL(DECODE(TRUNC(MONTHS_BETWEEN(trunc(吐舌_as_of_date),TRUNC(MMT1.TRANSACTION_DATE))),
0,0,
1,0,
2,0,
3,0,
4,0,
5,0,
6,0,
7,0,
8,0,
9,0,
10,0,
11,0,MMT1.SP_QTY),0))) OVR12_QTY,
organization_id organization_id,
inventory_item_id inventory_item_id,
subinventory_code subinventory_code
FROM
(
SELECT MMT.ORGANIZATION_ID ORGANIZATION_ID,
MMT.INVENTORY_ITEM_ID INVENTORY_ITEM_ID,
mmt.subinventory_code subinventory_code,
TRUNC(MMT.TRANSACTION_DATE) TRANSACTION_DATE,
SUM(DECODE(MMT.TRANSACTION_TYPE_ID,
2,MMT.PRIMARY_QUANTITY,
3,MMT.PRIMARY_QUANTITY,
4,MMT.PRIMARY_QUANTITY,
8,MMT.PRIMARY_QUANTITY,
12,MMT.PRIMARY_QUANTITY,
15,MMT.PRIMARY_QUANTITY,
17,MMT.PRIMARY_QUANTITY,
18,MMT.PRIMARY_QUANTITY,
36,MMT.PRIMARY_QUANTITY,
37,MMT.PRIMARY_QUANTITY,
38,MMT.PRIMARY_QUANTITY,
40,MMT.PRIMARY_QUANTITY,
41,MMT.PRIMARY_QUANTITY,
42,MMT.PRIMARY_QUANTITY,
44,MMT.PRIMARY_QUANTITY,
51,MMT.PRIMARY_QUANTITY,
70,MMT.PRIMARY_QUANTITY,
71,MMT.PRIMARY_QUANTITY,0)) SP_QTY
FROM
MTL_MATERIAL_TRANSACTIONS MMT,
MTL_SYSTEM_ITEMS MSI
WHERE MMT.ORGANIZATION_ID = MSI.ORGANIZATION_ID
AND MMT.INVENTORY_ITEM_ID = MSI.INVENTORY_ITEM_ID
AND MMT.ORGANIZATION_ID = 吐舌_org_id
AND TRUNC(MMT.TRANSACTION_DATE) <= trunc(吐舌_as_of_date)
AND TO_CHAR(MMT.TRANSACTION_DATE,'YYYYMMDD'>='20070401'
and (mmt.transaction_type_id in (12,15,17,18,36,37,38,40,41,42,44,70,71)
or
(mmt.transaction_type_id in (2,3,4,8,51) and mmt.primary_quantity > 0))
&lp_item
GROUP BY
MMT.ORGANIZATION_ID,
MMT.INVENTORY_ITEM_ID,
mmt.subinventory_code,
MMT.TRANSACTION_DATE
UNION ALL
SELECT MMT.ORGANIZATION_ID ORGANIZATION_ID,
MMT.INVENTORY_ITEM_ID INVENTORY_ITEM_ID,
mmt.subinventory_code subinventory_code,
TRUNC(MMT.TRANSACTION_DATE) TRANSACTION_DATE,
SUM(DECODE(MMT.TRANSACTION_TYPE_ID,
2,MMT.PRIMARY_QUANTITY,
3,MMT.PRIMARY_QUANTITY,
4,MMT.PRIMARY_QUANTITY,
8,MMT.PRIMARY_QUANTITY,
12,MMT.PRIMARY_QUANTITY,
15,MMT.PRIMARY_QUANTITY,
17,MMT.PRIMARY_QUANTITY,
18,MMT.PRIMARY_QUANTITY,
36,MMT.PRIMARY_QUANTITY,
37,MMT.PRIMARY_QUANTITY,
38,MMT.PRIMARY_QUANTITY,
40,MMT.PRIMARY_QUANTITY,
41,MMT.PRIMARY_QUANTITY,
42,MMT.PRIMARY_QUANTITY,
44,MMT.PRIMARY_QUANTITY,
51,MMT.PRIMARY_QUANTITY,
70,MMT.PRIMARY_QUANTITY,
71,MMT.PRIMARY_QUANTITY,0)) SP_QTY
FROM
MTL_MATERIAL_TRANSACTIONS MMT,
MTL_SYSTEM_ITEMS MSI
WHERE MMT.ORGANIZATION_ID = MSI.ORGANIZATION_ID
AND MMT.INVENTORY_ITEM_ID = MSI.INVENTORY_ITEM_ID
AND MMT.ORGANIZATION_ID = 3 --get the data from the a ORG
AND TRUNC(MMT.TRANSACTION_DATE) <= trunc(吐舌_as_of_date)
AND TO_CHAR(MMT.TRANSACTION_DATE,'YYYYMMDD'<'20070401'
and (mmt.transaction_type_id in (12,15,17,18,36,37,38,40,41,42,44,70,71)
or
(mmt.transaction_type_id in (2,3,4,8,51) and mmt.primary_quantity > 0))
&lp_item
GROUP BY
MMT.ORGANIZATION_ID,
MMT.INVENTORY_ITEM_ID,
mmt.subinventory_code,
MMT.TRANSACTION_DATE
) MMT1
GROUP BY
MMT1.ORGANIZATION_ID,
MMT1.INVENTORY_ITEM_ID,
mmt1.subinventory_code
UNION
SELECT sum(mmt.primary_quantity) primary_quantity,
0 transaction_quantity,
0 f1t3_qty,
0 f4t6_qty,
0 f7t9_qty,
0 f10t12_qty,
0 ovr12_qty,
mmt.organization_id organization_id,
mmt.inventory_item_id inventory_item_id,
mmt.subinventory_code subinventory_code
FROM
mtl_material_transactions mmt,
mtl_system_items msi
WHERE
mmt.subinventory_code is not null
AND mmt.inventory_item_id = msi.inventory_item_id
AND mmt.organization_id = msi.organization_id
AND trunc(mmt.transaction_date) > trunc(吐舌_as_of_date)
AND mmt.organization_id = 吐舌_org_id
AND TO_CHAR(MMT.TRANSACTION_DATE,'YYYYMMDD'>='20070401'
and mmt.transaction_type_id not in (24,90)
&lp_item
GROUP BY
mmt.organization_id,
mmt.inventory_item_id,
mmt.subinventory_code
UNION ALL
SELECT sum(mmt.primary_quantity) primary_quantity,
0 transaction_quantity,
0 f1t3_qty,
0 f4t6_qty,
0 f7t9_qty,
0 f10t12_qty,
0 ovr12_qty,
mmt.organization_id organization_id,
mmt.inventory_item_id inventory_item_id,
mmt.subinventory_code subinventory_code
FROM
mtl_material_transactions mmt,
mtl_system_items msi
WHERE
mmt.subinventory_code is not null
AND mmt.inventory_item_id = msi.inventory_item_id
AND mmt.organization_id = msi.organization_id
AND trunc(mmt.transaction_date) > trunc(吐舌_as_of_date)
AND mmt.organization_id = 3
AND TO_CHAR(MMT.TRANSACTION_DATE,'YYYYMMDD'<'20070401'
and mmt.transaction_type_id not in (24,90)
&lp_item
GROUP BY
mmt.organization_id,
mmt.inventory_item_id,
mmt.subinventory_code
UNION
SELECT 0 primary_quantity,
SUM(MOQ.TRANSACTION_QUANTITY) TRANSACTION_QUANTITY,
0 f1t3_qty,
0 f4t6_qty,
0 f7t9_qty,
0 f10t12_qty,
0 ovr12_qty,
MOQ.ORGANIZATION_ID organization_id,
MOQ.INVENTORY_ITEM_ID inventory_item_id,
moq.subinventory_code subinventory_code

FROM
MTL_ONHAND_QUANTITIES MOQ,
MTL_SYSTEM_ITEMS MSI
WHERE MOQ.ORGANIZATION_ID = MSI.ORGANIZATION_ID
AND MOQ.INVENTORY_ITEM_ID = MSI.INVENTORY_ITEM_ID
AND MSI.ORGANIZATION_ID = 吐舌_org_id
&lp_item
GROUP BY
MOQ.ORGANIZATION_ID,
MOQ.INVENTORY_ITEM_ID,
moq.subinventory_code

說明一下
sql1能夠在4分鐘內執行完畢﹐而sql2确需要花費20分鐘﹐sql2與sql1的差异是:sql2增加了2個uion all取得某個organization_id的material transactions,sql2需要优化﹐請高手幫忙一下﹐謝謝先
发表于 2007/6/18 17:20:20 | 显示全部楼层
看着就眼晕啊
太。。。。。。。。。
 楼主| 发表于 2007/6/19 08:10:26 | 显示全部楼层
關鍵是看看兩個uion all是否有优化的可能﹐因為我就是加了這兩個uion all導致執行速度很慢的
 楼主| 发表于 2007/6/19 09:28:54 | 显示全部楼层
沒有人理財我﹐自己頂一下
发表于 2007/6/19 09:39:07 | 显示全部楼层
把兩個sql執行計劃貼出來看一下,另所涉及表的索引情況!
 楼主| 发表于 2007/6/19 10:14:52 | 显示全部楼层
感謝回复﹐改sql是在report builder中使用的﹐至于index,請教以下改如何看﹐謝謝
发表于 2007/6/19 11:06:02 | 显示全部楼层
如有用pl/sql developer,請把sql放到pl/sql裏查看執行計劃,如沒有,可以用sqlplus 進行sql trace。

索引可在pl/sql developer,將光標移到表名上,然後右鍵,選擇view或edit,可查看表結構,及索引情況!


select a.index_name,b.column_name from dba_indexes a,dba_ind_columns b where a.index_name=b.index_name and a.table_name = &table_name
group by a.table_name,a.index_name,b.column_name

用上面sql也可以找到!
 楼主| 发表于 2007/6/19 11:30:26 | 显示全部楼层

thanks you for your reply,following is the index

INDEX_NAME        COLUMN_NAME
MTL_MATERIAL_TRANSACTIONS_N1        ORGANIZATION_ID
MTL_MATERIAL_TRANSACTIONS_N1        TRANSACTION_DATE
MTL_MATERIAL_TRANSACTIONS_N1        INVENTORY_ITEM_ID
MTL_MATERIAL_TRANSACTIONS_N2        ORGANIZATION_ID
MTL_MATERIAL_TRANSACTIONS_N2        TRANSACTION_DATE
MTL_MATERIAL_TRANSACTIONS_N2        TRANSACTION_SOURCE_ID
MTL_MATERIAL_TRANSACTIONS_N3        ORGANIZATION_ID
MTL_MATERIAL_TRANSACTIONS_N3        TRANSACTION_DATE
MTL_MATERIAL_TRANSACTIONS_N3        SUBINVENTORY_CODE
MTL_MATERIAL_TRANSACTIONS_N4        VENDOR_LOT_NUMBER
MTL_MATERIAL_TRANSACTIONS_N5        ORGANIZATION_ID
MTL_MATERIAL_TRANSACTIONS_N5        TRANSACTION_DATE
MTL_MATERIAL_TRANSACTIONS_N6        SHIPMENT_NUMBER
MTL_MATERIAL_TRANSACTIONS_N7        ACCT_PERIOD_ID
MTL_MATERIAL_TRANSACTIONS_N7        ORGANIZATION_ID
MTL_MATERIAL_TRANSACTIONS_N8        ORGANIZATION_ID
MTL_MATERIAL_TRANSACTIONS_N8        TRANSACTION_DATE
MTL_MATERIAL_TRANSACTIONS_N8        TRANSACTION_SOURCE_NAME
MTL_MATERIAL_TRANSACTIONS_N8        TRANSACTION_SOURCE_TYPE_ID
MTL_MATERIAL_TRANSACTIONS_N9        ORGANIZATION_ID
MTL_MATERIAL_TRANSACTIONS_N9        TRANSACTION_DATE
MTL_MATERIAL_TRANSACTIONS_N9        TRANSACTION_TYPE_ID
MTL_MATERIAL_TRANSACTIONS_N9        TRANSACTION_ACTION_ID
MTL_MATERIAL_TRANSACTIONS_U1        TRANSACTION_ID
MTL_MATERIAL_TRANSACTIONS_U2        TRANSACTION_ID
MTL_MATERIAL_TRANSACTIONS_U2        TRANSACTION_TYPE_ID
MTL_MATERIAL_TRANSACTIONS_U2        TRANSACTION_ACTION_ID
MTL_MATERIAL_TRANSACTIONS_U2        TRANSACTION_SOURCE_TYPE_ID
MTL_MATERIAL_TRANSACTIONS_N10        COSTED_FLAG
MTL_MATERIAL_TRANSACTIONS_N10        TRANSACTION_GROUP_ID
MTL_MATERIAL_TRANSACTIONS_N11        INVOICED_FLAG
MTL_MATERIAL_TRANSACTIONS_N12        TRANSACTION_SET_ID
MTL_MATERIAL_TRANSACTIONS_N13        PM_COST_COLLECTED
MTL_MATERIAL_TRANSACTIONS_N13        PM_COST_COLLECTOR_GROUP_ID
MTL_MATERIAL_TRANSACTIONS_N14        COMPLETION_TRANSACTION_ID
MTL_MATERIAL_TRANSACTIONS_N15        TRANSACTION_DATE
MTL_MATERIAL_TRANSACTIONS_N15        TRANSACTION_TYPE_ID
MTL_MATERIAL_TRANSACTIONS_N15        TRANSACTION_ACTION_ID
MTL_MATERIAL_TRANSACTIONS_N15        TRANSACTION_SOURCE_TYPE_ID
MTL_MATERIAL_TRANSACTIONS_N19        RCV_TRANSACTION_ID
MTL_MATERIAL_TRANSACTIONS_N20        PROJECT_ID
MTL_MATERIAL_TRANSACTIONS_N21        TO_PROJECT_ID
MTL_MATERIAL_TRANSACTIONS_N22        SOURCE_PROJECT_ID
MTL_MATERIAL_TRANSACTIONS_N23        TRANSFER_TRANSACTION_ID
 楼主| 发表于 2007/6/19 11:33:41 | 显示全部楼层
here don't allow to use pl/sql,i use the toad tool
发表于 2007/6/19 13:06:17 | 显示全部楼层
toad 更簡單,把光標放在表名上,按F4就行了!
发表于 2007/6/19 13:07:23 | 显示全部楼层
上面是哪個表的!
 楼主| 发表于 2007/6/19 13:12:40 | 显示全部楼层
MTL_MATERIAL_TRANSACTIONS
 楼主| 发表于 2007/6/19 13:16:35 | 显示全部楼层
改table包含500多萬多
发表于 2007/6/19 13:17:09 | 显示全部楼层
AND trunc(mmt.transaction_date) > trunc(吐舌_as_of_date)
AND mmt.organization_id = 3
AND TO_CHAR(MMT.TRANSACTION_DATE,'YYYYMMDD'<'20070401'

能否把上面mmt.transaction_date的函數去掉,如果有執行計劃就好了!
主要是索引情況,看這sql有沒走索引,像上面的organization_id,如有走這個索引,將會快很多!
可以將sql的各個部分分開調試!

覺得如果優化成功的話,速度應會提高很多的,toad也可以看執行計劃的,不會,可找一下你們的dba!
发表于 2007/6/19 13:18:04 | 显示全部楼层
最後需取出多少條記錄啊
 楼主| 发表于 2007/6/19 13:20:23 | 显示全部楼层
改table包含500多萬條數据
 楼主| 发表于 2007/6/19 13:25:45 | 显示全部楼层
最后取出的數据大概几百條而已﹐dba在hongkong,而且我也跟他不熟悉
 楼主| 发表于 2007/6/19 13:29:07 | 显示全部楼层
ORGANIZATION_ID有建立index
发表于 2007/6/19 14:14:54 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2007/6/19 14:34:49 | 显示全部楼层
上面有看到有索引,而且where條件的三個欄位有做復合索引,如sql有走索引的話,應該是很快的!
估計是沒走索引!

在有mtl_material_transactions這個表的sql裏,加個hint試試(select /*+ index(MMT MTL_MATERIAL_TRANSACTIONS_N1) */ ... from mtl_material_transactions mmt,...),強制讓它走索引試試!

呵呵,不過這像瞎貓抓死老鼠!還是要執行計劃啊!早早相關的文檔吧,看執行計劃很簡單的!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|小黑屋|手机版|壹佰网 ERP100 ( 京ICP备19053597号-2 )

Copyright © 2005-2012 北京海之大网络技术有限责任公司 服务器托管由互联互通
手机:13911575376
网站技术点击发送消息给对方83569622   广告&合作 点击发送消息给对方27675401   点击发送消息给对方634043306   咨询及人才点击发送消息给对方138011526

GMT+8, 2025/11/30 13:41 , Processed in 0.021349 second(s), 14 queries , File On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表