はじめに
kintoneではアプリのフィールドを利用してレコードの絞り込みを設定できますが、利用するフィールドによって絞り込みの処理速度に違いが生じます。
本記事では、同じ選択式のフィールドの「ラジオボタン・ドロップダウン」(以下、単一選択系フィールド)と「チェックボックス・複数選択」(以下、複数選択系フィールド)を絞り込みの条件に利用したときの処理速度の違いを紹介します。
また、複数選択系フィールドに追加の絞り込み条件を設定することで、レコードの絞り込み処理速度が速くなるケースを紹介します。
なお、本記事ではレコード一覧画面の絞り込みで確認していますが、APIを利用してレコードを取得するときもポイントは同様になります。
警告
ご利用の環境内のデータ量等の要因により処理速度は変わります。
同様の絞り込みを行った場合に同じ結果を保証するものではありません。
本記事ではkintoneのレコード絞り込み時間を計測しています。
クライアントPCで、絞り込んだレコードがすべて表示されるまでの時間ではない点にご注意ください。
想定読者
- kintoneのアプリ管理者
フィールドによるレコードの絞り込み処理速度の違い
単一選択系フィールドと複数選択系フィールドを絞り込みの条件に利用したとき、処理速度がどの程度変わるのかを検証しました。
検証条件
アプリの構成
以下のフィールドを配置したアプリを用意します。
アクセス権は設定しません。
- ラジオボタン
- ドロップダウン
- チェックボックス
- 複数選択
それぞれのフィールドに、sample1 ~ sample5の5つの選択肢を設定します。
選んだ選択肢に応じて絞り込まれるレコードの数が変わるよう、レコードを登録します。
ヒットするレコード数の割合によってレコードの絞り込みの処理速度を比較するためです。
今回の検証では、1,111,100件のレコードを登録しました。
選択肢ごとのレコード登録状況は以下のとおりです。
選択肢 | 絞り込みの対象となる レコード数(件) |
絞り込みをした際の ヒット率(%) |
---|---|---|
sample1 | 100 | 0.009 |
sample2 | 1,000 | 0.09 |
sample3 | 10,000 | 0.9 |
sample4 | 100,000 | 9 |
sample5 | 1,000,000 | 90 |
「絞り込みをした際のヒット率(%)」について
アプリ内の全レコード数に対して、絞り込みの対象となるレコード数の割合です。
「絞り込みの対象となるレコード数 / アプリのレコード登録総数 × 100」で算出します。
以降「ヒット率」と記載します。
例:表「sample1」の列の場合、以下の意味になります。
- 絞り込みの対象となるレコード数(件)
- 選択肢sample1を登録したレコードが100件あります。
- 絞り込みをした際のヒット率(%)
- 「100 / 1,111,100 × 100 = 0.009」となります。
検証内容
レコードの絞り込み条件を作成します。
次の図のように、1つのフィールドを条件として使用し、選択肢の中からsample1 ~ sample5のいずれか1つを選びます。
今回は、4つのフィールドと5つの選択肢があるため、それぞれ絞り込み条件を設定し、合計20個の一覧を作成しました。
これにより、フィールドごとにヒット率の異なる5つの一覧が作成されました。
作成した一覧を選択して、フィールドによるレコードの絞り込み処理速度とヒット率によるレコードの絞り込み処理速度を確認します。
検証結果
結果は次のとおりです。
グラフより、本検証について以下のことが読み取れます。
- ヒット率が9 %以下のとき、単一選択系フィールドは、レコードの絞り込み処理速度が複数選択系フィールドに比べ、速くなりました。
- ヒット率が90 %のとき、4つのフィールドでレコードの絞り込み処理速度に差はほとんどありませんでした。
多数のレコードから少数のレコードを絞り込む場面では、単一選択系フィールドは、レコードの絞り込み処理速度が複数選択系フィールドに比べ、速くなると分かりました。
追加の絞り込み条件を設定してみたケース
フィールドによるレコードの絞り込み処理速度の違い より、複数選択系フィールドを利用したレコードの絞り込み処理速度は、単一選択系フィールドを利用したレコードの絞り込み処理速度に比べると遅くなる可能性があることを確認できました。
しかし、別の絞り込み条件を追加することで、複数選択系フィールドを利用している場合でも、レコードの絞り込み処理が速くなることもあります。
そこで、複数選択系フィールドに加えて数値フィールドを絞り込み条件として追加したときにレコードの絞り込み処理速度がどのように変化するのか検証しました。
なお、本検証の結果はいずれの場合でも成り立つとは限りません。
詳細は以下の
注意点
を確認してください。
検証条件
アプリの構成
以下のフィールドを配置したアプリを用意します。
アクセス権は設定しません。
- 数値
- チェックボックス
- 複数選択
そして、次の図のようにアプリに500,000件のレコードを登録しました。
複数選択系フィールドには、sample1 ~ sample6と、6つの選択肢を設定し、選んだ選択肢に応じて絞りこまれるレコードの数が変わるようにします。
数値フィールドには、1 ~ 500,000を連番で登録しました。
選択肢、数値の登録状況は以下のとおりです。
複数選択系フィールドの選択肢 | 数値フィールドの値 | レコードの件数 (ヒット率(%)) |
---|---|---|
sample1 | 1 ~ 50 | 50(0.01) |
sample2 | 51 ~ 550 | 500(0.1) |
sample3 | 551 ~ 5,550 | 5,000(1) |
sample4 | 5,551 ~ 55,550 | 50,000 (10) |
sample5 | 55,551 ~ 255,550 | 200,000(40) |
sample6 | 255,551 ~ 500,000 | 244,450 (49) |
検証内容
sample2を使用する絞り込みを4つ作成し、それぞれの絞り込み速度を確認します。
いずれの絞り込みも500,000件のレコードから500件のレコードを絞り込むように設定します。
絞り込みの条件を複数設定した場合は「すべての条件を満たす」を選択しています。
設定した絞り込みの条件は以下のとおりです。
絞り込み名 | 条件 |
---|---|
絞り込み1 |
|
絞り込み2 |
|
絞り込み3 |
|
絞り込み4 |
|
検証結果
結果は次のとおりです。
絞り込み1を基準にすると、絞り込み2と絞り込み3ではレコードの絞り込みにかかる時間が大幅に短くなっています。
また絞り込み4もレコードの絞り込みにかかる時間が短くなっています。
このときのデータベースでの内部処理を確認したところ、チェックボックスフィールドのデータを使ったレコードの絞り込みが行われる前に、数値フィールドのデータを使ったレコードの絞り込みが行われていました。
つまり、絞りこみ2 ~ 4では、500,000件のレコードから数値フィールドを利用して5,000件、50,000件、300,000件とあらかじめレコードの数を絞ることでレコードの絞り込み処理が速くなったのだと考えられます。
絞り込み1と絞り込み2の処理イメージは、以下になります。
絞り込み1の処理イメージ
絞り込み2の処理イメージ
注意点
複数の絞り込み条件を設定する場合は以下の注意点をご認識ください。
警告
- kintoneで設定された絞り込み条件の順番によらず、kintone内部のデータベースシステム側で絞り込みの実行順序が最適化されるので、kintone側での設定順序は関係ありません。
- 絞り込みの実行順序は、データ件数や絞り込み条件の設定など、さまざまな条件から決定されます。絞り込み条件を追加することで、状況によっては処理時間が長くなりkintoneの負荷を高める可能性もあります。
複雑な設定をしているアプリの設定を変更する場合は、ユーザーからのアクセスが少ない時間帯に検証することをご検討ください。
おわりに
1つの選択肢を条件に多数のレコードから少数のレコードを絞り込む場面では、単一選択系フィールドか複数選択系フィールドのどちらかを利用することで処理速度が異なることを紹介しました。
本記事を参考に、以下の考慮点を意識したkintoneの運用を検討していただけると幸いです。
- アプリを設計するタイミングで、単一選択系フィールドを利用した構成とする。
- 選択式のフィールドをレコードの絞り込みに利用する場合は、可能なら単一選択系フィールドを利用する。
- 複数選択系フィールドを利用する場合は、他のフィールドを利用したレコードの絞り込み条件を追加することで、レコードの絞り込み処理が速くなるかを試してみる。
特に、アプリのデフォルトで表示される一覧は多くのアクセスが見込まれます。
この一覧の絞り込み条件を処理が速いものにしておくとkintone全体の負荷が低減されます。
このTipsは、2024年3月版kintoneで動作を確認しています。