JQL 最適化の推奨事項

同じようには作成されない JQL クエリがあります。JQL は最も効率的な方法であるかどうかに関係なく、指示したとおりに実行する厳密なロジックを使用します。これらの非効率性が重なると、ボード、プラン、またはプロジェクト上でパフォーマンス上の課題が生じる可能性があります。

このページでは、効率的な JQL クエリを記述するための一般的なガイドラインについて説明します。

クエリの範囲を制限する

JQL クエリの作成時は、特定のプロジェクトまたはボードを含めるか除外して課題を検索する場所を Jira で指定します。

クエリで検索する課題の数が少なくなると、結果の読み込みが速くなります。

JQL フィルターによって、自分に割り当てられたすべての作業を表示するとします。ただし、あなたが取り組んでいるプロジェクトは組織全体で 2 つだけです。

このクエリは次のように機能します。

assignee is currentUser()

しかし、次のほうが良いでしょう。

project in (The Big Cheese, Project Kanban) and assignee is currentUser()

これには、次のような理由があります。

最初のクエリでは、割り当てられている課題を探すためにサイトにあるすべての課題が検索されます。2 番目のクエリは、より自分のプロジェクトに絞り込まれています。サイトの課題が 10,000 件ある場合、Jira ではそのプロジェクトのうち 500 件の課題を調べて、残りの 9,500 件を無視できます。結果は同じでも、絞り込む課題が少ないほどクエリの実行速度を速くできます。

また、ほかのフィールドによって、日付、プロジェクト タイプ、最終表示日時など、JQL クエリの範囲を絞り込めます。

メイン句には OR を、サブ句には AND を使用する

Jira がクエリを解釈する方法によって一見論理的な文字列が複数の冗長な検索に分割されて、実行に時間がかかる場合があります。重複検索の一般的な原因は、メイン句で AND を使用することです。AND は主にサブ句で使用して、OR をメイン句用に取っておくことをお勧めします。つまり、簡単に言うと、OR 句は括弧の外側に、AND 句は内側に入れることをお勧めします。

JQL クエリによって、プロジェクト PMO の課題 (担当者 A に割り当てられた課題) とプロジェクト TIS (担当者 B に割り当てられた課題) のみを表示するとします。

このクエリは次のように機能します。

(project = TIS OR assignee = A) AND (project = PMO OR assignee = B)

しかし、次のほうが良いでしょう。

project in (TIS, PMO) OR assignee in (A, B)

これには、次のような理由があります。

これは、JQL に AND 句が含まれている際に、Jira ではサブ句のどちらかではなく両方に一致する課題のみを返して、最初のクエリが次のように解釈されるためです。

  • in Project TIS AND in Project PMO

  • assigned to Assignee B AND in Project TIS

  • assigned to Assignee A AND in Project PMO

  • assigned to Assignee A AND assigned to Assignee B

Jira Software Cloud における JQL によるクエリの解釈方法に関する詳細



あとの 2 つの検索では結果は返されず、Jira では検索が引き続き実行されます。このような不要な検索によって、JQL クエリのパフォーマンスが低下する可能性があります。2 番目のクエリでは冗長な検索が除外されるため、大規模なデータ セットの実行時間に大きく影響する可能性があります。

繰り返しになりますが、特定のプロジェクトやボードを含めて、クエリで不必要な課題が検索されないようにしてください。

問題を起こすフィールドや関数を避ける

一部のフィールドは、その複雑さのために低速になることがわかっています。たとえば、label フィールドは複数のデータ セットを参照する必要があるため、検索で使用するには複雑なフィールドです。ただし、IssueKey フィールドによって同じ結果を迅速に取得できます。

また、特定の関数が問題になる可能性があります。たとえば、portfolioChildIssuesOf 関数の使用には、データベースを介したいくつかの再帰が必要です。現状として、これには推奨できる回避策はありません。

JQL クエリは句ごとに構築する

ここで説明する 2 つのフィールドと関数は、すべてを網羅するリストではありません。クエリの遅延の原因となっているフィールドや関数を特定するには、すべてのフィールドと関数を一度に記述するのではなく句ごとに構築します。句に関数を徐々に追加してから検索を実行することで最も遅いフィールドを特定できるため、そのようなフィールドを軽減または回避できます。

さらにヘルプが必要ですか?

アトラシアン コミュニティをご利用ください。