暂无图片
同样的SQL,不同方式执行,时间不同
我来答
分享
小虾米
2021-10-20
同样的SQL,不同方式执行,时间不同

在公司测试环境中,遇到一例case

同样一例sql语句

1.当在plsql工具sql窗口中执行

SELECT COUNT(1)
  FROM PS_PART           PP,
       PS_PART_MASTER    PM,
       PS_SBOM           PS,
       PS_PART_USAGELINK U,
       PS_PART           UP,
       PS_PART_MASTER    UPM,
       PS_PART_USAGELINK MU,
       PS_PART           MUP,
       PS_PART_MASTER    MUPM
 WHERE PP.SERIAL_ID = PS.SERIAL_ID
   AND PP.MASTER_SEIRAL_ID = PM.SERIAL_ID
复制

执行时间需要1分钟以上


2.当在plsql工具命令窗口中执行

SELECT COUNT(1)
  FROM PS_PART           PP,
       PS_PART_MASTER    PM,
       PS_SBOM           PS,
       PS_PART_USAGELINK U,
       PS_PART           UP,
       PS_PART_MASTER    UPM,
       PS_PART_USAGELINK MU,
       PS_PART           MUP,
       PS_PART_MASTER    MUPM
 WHERE PP.SERIAL_ID = PS.SERIAL_ID
   AND PP.MASTER_SEIRAL_ID = PM.SERIAL_ID
复制

执行时间需要1秒

3.当在sqlplus工具与DBEAVER工具中执行中执行

SELECT COUNT(1)
  FROM PS_PART           PP,
       PS_PART_MASTER    PM,
       PS_SBOM           PS,
       PS_PART_USAGELINK U,
       PS_PART           UP,
       PS_PART_MASTER    UPM,
       PS_PART_USAGELINK MU,
       PS_PART           MUP,
       PS_PART_MASTER    MUPM
 WHERE PP.SERIAL_ID = PS.SERIAL_ID
   AND PP.MASTER_SEIRAL_ID = PM.SERIAL_ID
复制

执行时间需要1秒

4.当在plsql工具sql窗口中执行

SELECT COUNT(1)
  FROM PDM.PS_PART           PP,
       PDM.PS_PART_MASTER    PM,
       PDM.PS_SBOM           PS,
       PDM.PS_PART_USAGELINK U,
       PDM.PS_PART           UP,
       PDM.PS_PART_MASTER    UPM,
       PDM.PS_PART_USAGELINK MU,
       PDM.PS_PART           MUP,
       PDM.PS_PART_MASTER    MUPM
 WHERE PP.SERIAL_ID = PS.SERIAL_ID
   AND PP.MASTER_SEIRAL_ID = PM.SERIAL_ID
   AND PP.ENABLED_FLAG = 1
复制

执行时间需要1秒


用户均为PDM,请问都是一样的sql,为什么第一种方式执行,需要耗时这么多

我来答
添加附件
收藏
分享
问题补充
4条回答
默认
最新
JiekeXu
暂无图片

你的第一个在执行一遍也是1秒,不信你试试。

同样的 SQL 第一遍先加载到内存中需要一些时间,后面的几个都从内存中读取,当然需要一秒就返回结果了。

暂无图片 评论
暂无图片 有用 1
打赏 0
暂无图片
小虾米

语句只截取了部分,后面都是限定条件,没有排序与筛选

暂无图片 评论
暂无图片 有用 0
打赏 0
肖杰

这个其实你做个10053就很清楚,这么多表关联,时间并没有花在执行上,而是花在了解析上面,各种不同的排列组合,你可以把

  • _optimizer_max_permutations这个参数调小一点,默认应该是8000
  • 暂无图片 评论
    暂无图片 有用 0
    打赏 0
    徐孝亮

    看一下执行计划

    暂无图片 评论
    暂无图片 有用 0
    打赏 0
    回答交流
    Markdown


    请输入正文
    提交