oracle 大容量表多表关联,如何提高性能?
2008-11-02 19:11
267 查看
笔者向一个表中插入数据关联三个表,在关联语句中存在子查询,表级容量都在千万级,运行时间难以忍受,具体语句如下:
INSERT INTO odse.te_prd_aux_prod_ins
(
SERV_PRODUCT_ROW_ID
,SERV_PRODUCT_ID
,SERV_ROW_ID
,SERV_ID
,PRODUCT_ROW_ID
,product_id
,product_standard_code
,BIZ_AREA_ID
,REGION_ID
,CUR_AGREE_ROW_ID
,APPLY_DATE
,EFF_DATE
,EXP_DATE
,COMPLETE_DATE
,STOP_DATE
,REMOVE_DATE
,STATUS_CD
,SUB_ACT_CD
,SUB_ACT_CD_NM
,CUR_MONTH_EFF_FLAG
,CREATED_DATE
,CREATED_BY
,LAST_UPD
,LAST_UPD_BY
,INDB_FILE_NAME
,OP_DATE
)
SELECT
ta.ASSET_ROW_ID
,ta.X_PROD_INST_NUM
,ta.ROOT_ASSET_ID
,ta.X_PROD_INST_NUM
,ta.PROD_ID
,tp.prod_id
,tp.standard_code
,ta.BIZ_AREA_ID
,ta.X_REGION_ID
,ta.CUR_AGREE_ID
,ta.INSTALL_DT
,tv.ATTRIB_12
,tv.ATTRIB_13
,tv.ATTRIB_27
,tv.ATTRIB_28
,tv.ATTRIB_29
,ta.STATUS_CD
,ta.SUB_ACT_CD
,ta.SUB_ACT_CD_NM
,ta.X_TAKEEFFECT_FLAG
,ta.CREATED_DATE
,ta.CREATED_BY
,ta.LAST_UPD
,ta.LAST_UPD_BY
,ta.INDB_FILE_NAME
,ta.OP_DATE
FROM
(select * from odse.te_prd_proo_in_ap where rec_status=1) ta
LEFT JOIN
(select * from odsd.TES_CRM_PRODUCT where rec_status=1) tp
ON
ta.PROD_ID=tp.row_id
LEFT JOIN
(select * from odse.te_prd_prod_ext_x where rec_status=1) tv
ON
ta.asset_row_id=tv.asset_row_id
请高手们赐教如何提高运行速率?注:不使用存储过程和不建索引。
odse.te_prd_proo_in_ap 记录:57267461
odse.te_prd_prod_ext_x 记录:87674914
odsd.tes_crm_product 记录:4228
INSERT INTO odse.te_prd_aux_prod_ins
(
SERV_PRODUCT_ROW_ID
,SERV_PRODUCT_ID
,SERV_ROW_ID
,SERV_ID
,PRODUCT_ROW_ID
,product_id
,product_standard_code
,BIZ_AREA_ID
,REGION_ID
,CUR_AGREE_ROW_ID
,APPLY_DATE
,EFF_DATE
,EXP_DATE
,COMPLETE_DATE
,STOP_DATE
,REMOVE_DATE
,STATUS_CD
,SUB_ACT_CD
,SUB_ACT_CD_NM
,CUR_MONTH_EFF_FLAG
,CREATED_DATE
,CREATED_BY
,LAST_UPD
,LAST_UPD_BY
,INDB_FILE_NAME
,OP_DATE
)
SELECT
ta.ASSET_ROW_ID
,ta.X_PROD_INST_NUM
,ta.ROOT_ASSET_ID
,ta.X_PROD_INST_NUM
,ta.PROD_ID
,tp.prod_id
,tp.standard_code
,ta.BIZ_AREA_ID
,ta.X_REGION_ID
,ta.CUR_AGREE_ID
,ta.INSTALL_DT
,tv.ATTRIB_12
,tv.ATTRIB_13
,tv.ATTRIB_27
,tv.ATTRIB_28
,tv.ATTRIB_29
,ta.STATUS_CD
,ta.SUB_ACT_CD
,ta.SUB_ACT_CD_NM
,ta.X_TAKEEFFECT_FLAG
,ta.CREATED_DATE
,ta.CREATED_BY
,ta.LAST_UPD
,ta.LAST_UPD_BY
,ta.INDB_FILE_NAME
,ta.OP_DATE
FROM
(select * from odse.te_prd_proo_in_ap where rec_status=1) ta
LEFT JOIN
(select * from odsd.TES_CRM_PRODUCT where rec_status=1) tp
ON
ta.PROD_ID=tp.row_id
LEFT JOIN
(select * from odse.te_prd_prod_ext_x where rec_status=1) tv
ON
ta.asset_row_id=tv.asset_row_id
请高手们赐教如何提高运行速率?注:不使用存储过程和不建索引。
odse.te_prd_proo_in_ap 记录:57267461
odse.te_prd_prod_ext_x 记录:87674914
odsd.tes_crm_product 记录:4228
相关文章推荐
- Bulk绑定是如何提高性能的。有空再翻译吧。(from oracle)
- Oracle如何实现利用实体化视图提高查询性能
- .NET CF下如何提高应用程序的性能
- 如何最大限度提高.NET的性能
- 减少oracle sql回表次数 提高SQL查询性能
- 如何提高VMware虚拟化的性能
- 如何利用HTTP缓存提高网页性能
- Web前端性能优化——如何提高页面加载速度
- 用户如何提高存储性能?有哪些解决方案?
- [Oracle] 一个通过添加本地分区索引提高SQL性能的案例
- Hadoop如何通过Bloom Filter提高Join性能
- 教你如何提高SQL Server 2000 的性能?
- 如何提高tableView的性能
- 利用Oracle执行计划机制提高查询性能
- 如何提高读取BSEG的性能(sap已清项和未清项的提取)
- Web前端性能优化——如何提高页面加载速度
- 如何提高Linq查询的性能(上)
- 如何最大限度提高.NET的性能
- 圆角之战-如何提高性能
- 使用数组方式访问Oracle,提高性能