weixin_38647584 2022-04-25 17:03 采纳率: 69.2%
浏览 104
已结题

oracle数据库千万数据量分页请求慢,怎么优化sql或者其他方面

最近在做项目的时候有张单表数据量1千两百万多条数据,在查询的时候速度极其的慢,大概120秒才会返回,而且关联了四张表,与业务逻辑相关的,还必须得关联,不然逻辑出错,目前不知道如何进行优化,请各位同仁指点一二谢谢大家,
已加过索引了,还是慢
数据库oracle 后端java 用的分页框架是PageHelper这个
PPS_MBOM_DETAILED 主表,数据大约1千2百万条
sql如下
SELECT
*
FROM
(
SELECT
TMP_PAGE.*,
ROWNUM PAGEHELPER_ROW_ID
FROM
(
SELECT
assembly_item_code,
assembly_item_version,
account_number,
unit,
component_item_code,
component_item_version,
mfqty,
mtype,
mfmrtg,
mfartg,
cfmrtg,
cfartg,
PRICING_TIME,
UNIT_PRICE,
EXPIRATION_TIME,
VALID_STATUS,
START_TIME,
END_TIME,
ITEM_NAME,
PPVMLOC,
PPVBOM_NUM,
PPVSERIALNUM,
GROUP_DESCRIPTIONS,
GROUP_SHORT_NAME
FROM
(
SELECT
pmd.del_flag,
pmd.assembly_item_code,
pmd.assembly_item_version,
pmd.account_number,
pmd.component_item_code,
pmd.component_item_version,
pmd.mfqty,
pmd.unit,
pmd.mtype,
pmd.mfmrtg,
pmd.mfartg,
pmd.cfmrtg,
pmd.cfartg,
ppl.PRICING_TIME,
ppl.UNIT_PRICE,
ppl.EXPIRATION_TIME,
ppl.VALID_STATUS,
ppl.START_TIME AS START_TIME,
ppl.END_TIME AS END_TIME,
ppnm.ITEM_NAME,
ppv.MLOC AS PPVMLOC,
ppv.BOM_NUM AS PPVBOM_NUM,
ppv.SERIALNUM AS PPVSERIALNUM,
ple.GROUP_DESCRIPTIONS,
ple.GROUP_SHORT_NAME,
row_number ( ) over ( partition BY pmd.COMPONENT_ITEM_CODE, ppv.mloc ORDER BY 1 ) rn
FROM
PPS_MBOM_DETAILED pmd
INNER JOIN (
SELECT
a.TOP_PLAN_NUM,
a.MLOC,
a.BOM_NUM,
a.SERIALNUM
FROM
PPS_PLAN_VIN a
INNER JOIN ( SELECT TOP_PLAN_NUM, max( VERSIONS ) AS max_VERSIONS FROM PPS_PLAN_VIN GROUP BY TOP_PLAN_NUM ) b ON a.TOP_PLAN_NUM = b.TOP_PLAN_NUM
AND a.VERSIONS = b.max_VERSIONS
) ppv ON ppv.TOP_PLAN_NUM = pmd.account_number
INNER JOIN pps_parts_name_maintain ppnm ON ppnm.ITEM_NO = pmd.COMPONENT_ITEM_CODE
INNER JOIN pps_parts_library ppl ON pmd.COMPONENT_ITEM_CODE = ppl.COMPONENT_ITEM_CODE
AND ppl.CONTRACT_UNIT = ppv.MLOC
INNER JOIN ( SELECT DISTINCT PROD_LINE_GROUP_CODE, GROUP_DESCRIPTIONS, GROUP_SHORT_NAME FROM PPS_PROD_LINE WHERE GROUP_SHORT_NAME IS NOT NULL ) ple ON ple.PROD_LINE_GROUP_CODE = ppv.MLOC
AND NOT EXISTS ( SELECT 1 FROM PPS_virtual_position pvp WHERE pvp.line = pmd.lineid AND pvp.station = pmd.stationid )
)
WHERE
rn = 1
AND GROUP_SHORT_NAME IS NOT NULL
AND MFMRTG LIKE concat( concat( '%', 'CG' ), '%' )
AND MFARTG LIKE concat( concat( '%', 'ZZ' ), '%' )
AND del_flag = '0'
AND unit_price IS NOT NULL
) TMP_PAGE
)
WHERE

     PAGEHELPER_ROW_ID >= 10 
AND ROWNUM <= 0;

![img](

能提升一秒是一秒

  • 写回答

4条回答 默认 最新

  • 小方qdm 2022-04-25 17:42
    关注

    执行计划截个图看一下

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 7月7日
  • 已采纳回答 6月29日
  • 创建了问题 4月25日

悬赏问题

  • ¥15 鸿业暖通修改详细负荷时闪退
  • ¥15 有偿求码,CNN+LSTM实现单通道脑电信号EEG的睡眠分期评估
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)
  • ¥20 matlab yalmip kkt 双层优化问题
  • ¥15 如何在3D高斯飞溅的渲染的场景中获得一个可控的旋转物体