如何使用 SQL 提取 JIRA 问题的自定义字段数据?

How do I use SQL to extract custom field data for JIRA issues?

我正在尝试从 jiaissue table 中提取数据,以及来自同一问题的自定义字段中的数据。某些自定义字段的值在 customfieldvalue table 中,而另一些自定义字段的值在 customfieldoption table.

这是我目前的情况:

SELECT i.id, i.pkey
FROM jiraissue i
JOIN project p on i.project = p.id and p.id = 111 and i.resolutiondate IS NOT NULL
JOIN issuetype it on it.id = i.issuetype and it.id = 01
LEFT JOIN (SELECT cfv.issue, cf.cfname, cfo.customvalue 
             from customfieldvalue cfv
             join customfield cf on cf.ID = cfv.CUSTOMFIELD and cf.id = 303
             join customfieldoption cfo on cfo.id = cfv.stringvalue and cfo.parentoptionid is null and cfo.customvalue = 'X') u on u.ISSUE = i.ID
LEFT JOIN (SELECT cfv.issue, cf.cfname, cfv.textvalue 
              FROM customfieldvalue cfv
              JOIN customfield cf ON cf.ID = cfv.CUSTOMFIELD AND cf.id = 505) fci ON fci.ISSUE = i.ID

以上代码有效,但速度很慢。底层数据库是 MySQL.

MySQL 传统上在使用子查询时性能很差,因为它没有使用索引或在查询优化部分表现得很好。 (我相信这在 MySQL 5.6.x 左右的某个地方得到了改进。)

与此同时,您可以做的一件事是使用 temp tables 自己实现查询。我从查询中删除了 projectissuetype table,因为不需要它们只是为了过滤问题中的相关属性。最后,我还优化了 customfield table 的额外连接。 (由于您已经通过特定的自定义字段 ID 对其进行了查询,因此您可能已经知道字段名称。)

create temporary table cfu AS
select cfv.issue, cfo.customvalue 
from customfieldvalue cfv
join customfieldoption cfo on cfo.id = cfv.stringvalue and cfo.parentoptionid is null
WHERE  cfo.customvalue = 'X' AND CFV.customfield=303;

create temporary table cffci AS
SELECT cfv.issue, cfv.textvalue 
FROM customfieldvalue cfv
WHERE CFV.customfield=505;

alter table cfu add index idx_cfu_issue(issue);
alter table cffci add index idx_cffci_issue(issue);

select i.id, i.pkey, cfu.customvalue, cffci.textvalue
from jiraissue i
LEFT JOIN cfu on cfu.ISSUE = i.ID
LEFT JOIN cffci ON cffci.ISSUE = i.ID
WHERE i.resolutiondate IS NOT NULL AND i.project=111 AND i.issuetype=01