提高 Jira Oracle 查询性能

Improving Jira Oracle query performance

我们有一个将 jira 数据导入 oracle 数据库进行报告的过程。我目前遇到的问题是提取自定义字段并将行转换为 oracle 中的列。

jira custom data view

jira data view

这就是我提取查询的方式,这里的问题是性能无法扩展。

select A.*, (select cf.date_value from v_jira_custom_fields cf where cf.issue_id = a.issue_id and cf.custom_field_name = 'Start Date') Start_Date,
(select cf.number_value from v_jira_custom_fields cf where cf.issue_id = a.issue_id and cf.custom_field_name = 'Story Points') Story_Points,
(select cf.custom_value from v_jira_custom_fields cf where cf.issue_id = a.issue_id and cf.custom_field_name = 'Ready') Ready
from jira_data A
where A.project = 'DAK'
and A.issue_id = 2222

要真正了解瓶颈在哪里,我们至少需要获得执行计划和有关现有索引的信息。

假设你在两个表中都有 issue_idproject 的索引,我接下来要尝试的是摆脱 3 个单独的选择并加入你的 jira_data 到 pivoted jira_custom_fields

with P as (
    select
      project
    , issue_id
    , story_type_s
    , impacted_application_s
    , impacted_application_c
    , story_points_n
    , start_date_d
    , end_date_d
    , ready_c
    
    from v_jira_custom_fields
    
    pivot (
      max(string_value) as s
    , max(number_value) as n
    , max(text_value)   as t
    , max(date_value)   as d
    , max(custom_value) as c
    
      for customfield_id in (
        1 story_type
      , 2 impacted_application
      , 3 story_points
      , 4 start_date
      , 5 end_date
      , 6 ready
      )
    )
)
select
  A.*
, P.start_date_d   start_date
, P.story_points_n story_points
, P.ready_c        ready
from jira_data A
join P on A.project = P.project and A.issue_id = P.issue_id 
where A.project = 'DAK'
and A.issue_id = 2222