複数のレコードを取得するAPI実行時の注意点 (OR条件について)

著者名:soya ogasawara( サイボウズ株式会社 (External link)

目次

はじめに

本記事は、複数のレコードを取得するAPI実行時の注意点について紹介するシリーズの第二弾です。
第一弾の「totalCountパラメーター」の記事に続き、第二弾は「OR条件」の記事となります。
第一弾: 複数のレコードを取得するAPI実行時の注意点 (totalCountパラメーターについて)

この記事では、queryパラメーターに複数のOR条件を指定した際、条件の設定の方法によって、複数のレコードを取得するAPIの実行時の処理速度がどのように変わるかを検証しています。
検証結果から、複数のレコードを取得するAPIを快適に実行してもらうために、queryパラメーターを指定する際の注意点を紹介します。

注意事項

caution
警告

ご利用の環境内のデータ量等の要因により処理速度は変わります。

  • 同様のリクエストパラメーターで複数のレコードを取得するAPIを実行した場合に同じ結果を保証するものではありません。
  • 将来にわたっても同様の結果になることを保証するものではありません。

queryパラメーターとは?

queryパラメーターとは、複数のレコードを取得するAPIのリクエストパラメーターの1つです。
取得するレコードの絞り込み条件を記述できます。
たとえば、次のようにorなどの絞り込み条件や、order byといったソート条件を指定できます。

1
2
3
4
5
const body = {
  app: kintone.app.getId(),
  query: '作成日時 > "2012-02-03T09:00:00+0900" or 更新日時 < "2012-02-03T10:00:00+0900" order by レコード番号 asc limit 10 offset 1',
  fields: ['レコード番号', '作成日時', 'ドロップダウン']
};

複数のレコードを取得する

queryパラメーターに複数のOR条件を指定した場合の影響

queryパラメーターに複数のOR条件をAND条件で接続した条件を指定した場合、リクエストが大幅に遅延するなど、kintoneを快適に使えなくなる場合があります。

検証条件

複数のレコードを取得するAPIを実行する時にqueryパラメーターを指定し、その処理速度を比較します。
次の検証A、検証Bの条件で確認します。

  • 検証A:queryパラメーターに単に複数のOR条件を設定した場合
  • 検証B:queryパラメーターに複数のOR条件をAND条件で接続した条件を設定した場合

検証環境

  • 使用した検証環境:kintone 2024年11月版
  • ブラウザー:Google Chrome

アプリ構成

上記を確認するためのアプリ構成として、1つのアプリに次の画像の25個の数値フィールドを用意します。

レコード登録内容

アプリには100,000件のレコードを登録します。
各レコード内の25個の数値フィールドの値は、次の「検証時に実行したリクエストパラメーター」の各queryを指定してAPIを実行した際に、すべて10,000件ヒットするように1〜10までの値を割り振りました。

検証時に実行したリクエストパラメーター

6行目のqueryの値を都度変更して実行します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
kintone.events.on('app.record.index.show', async (event) => {
  const record = event.record;
  const body = {
    app: kintone.app.getId(),
    query: '(数値1=1 or 数値6=1 or 数値11=1 or 数値16=1 or 数値21=1) limit 500'
  };

  await kintone.api(
    kintone.api.url('/k/v1/records.json', true),
    'GET',
    body,
    (resp) => {
      console.log(resp);
    },
    (error) => {
      console.log(error);
    }
  );
});

具体的な値は次のようになります。

検証A:queryパラメーターに単に複数のOR条件を設定した場合
条件 queryパラメーターの値
OR4個 (数値1=1 or数値6=1 or数値11=1 or数値16=1 or数値21=1)
OR9個 (数値1=2 or数値2=2 or数値6=2 or数値7=2 or数値11=2 or数値12=2 or数値16=2 or数値17=2 or数値21=2 or数値22=2)
OR14個 (数値1=3 or数値2=3 or数値3=3 or数値6=3 or数値7=3 or数値8=3 or数値11=3 or数値12=3 or数値13=3 or数値16=3 or数値17=3 or数値18=3 or数値21=3 or数値22=3 or数値23=3)
OR19個 (数値1=4 or数値2=4 or数値3=4 or数値4=4 or数値6=4 or数値7=4 or数値8=4 or数値9=4 or数値11=4 or数値12=4 or数値13=4 or数値14=4 or数値16=4 or数値17=4 or数値18=4 or数値19=4 or数値21=4 or数値22=4 or数値23=4 or数値24=4)
OR24個 (数値1=5 or数値2=5 or数値3=5 or数値4=5 or数値5=5 or数値6=5 or数値7=5 or数値8=5 or数値9=5 or数値10=5 or数値11=5 or数値12=5 or数値13=5 or数値14=5 or数値15=5 or数値16=5 or数値17=5 or数値18=5 or数値19=5 or数値20=5 or数値21=5 or数値22=5 or数値23=5 or数値24=5 or数値25=5)
検証B:queryパラメーターに複数のOR条件をAND条件で接続した条件を設定した場合
条件 queryパラメーターの値
OR0個×AND4個 (数値1=6)and(数値6=6)and(数値11=6)and(数値16=6)and(数値21=6)
OR1個×AND4個 (数値1=7 or数値2=7)and(数値6=7 or数値7=7)and(数値11=7 or数値12=7)and(数値16=7 or数値17=7)and(数値21=7 or数値22=7)
OR2個×AND4個 (数値1=8 or数値2=8 or数値3=8)and(数値6=8 or数値7=8 or数値8=8)and(数値11=8 or数値12=8 or数値13=8)and(数値16=8 or数値17=8 or数値18=8)and(数値21=8 or数値22=8 or数値23=8)
OR3個×AND4個 (数値1=9 or数値2=9 or数値3=9 or数値4=9)and(数値6=9 or数値7=9 or数値8=9 or数値9=9)and(数値11=9 or数値12=9 or数値13=9 or数値14=9)and(数値16=9 or数値17=9 or数値18=9 or数値19=9)and(数値21=9 or数値22=9 or数値23=9 or数値24=9)
OR4個×AND4個 (数値1=10 or数値2=10 or数値3=10 or数値4=10 or数値5=10)and(数値6=10 or数値7=10 or数値8=10 or数値9=10 or数値10=10)and(数値11=10 or数値12=10 or数値13=10 or数値14=10 or数値15=10)and(数値16=10 or数値17=10 or数値18=10 or数値19=10 or数値20=10)and(数値21=10 or数値22=10 or数値23=10 or数値24=10 or数値25=10)

検証Aと検証Bの比較

queryパラメーターに複数のOR条件をAND条件で接続した条件を設定したときの処理速度が、単に複数のOR条件を設定した場合より遅くなることを確認しました。
検証Aで、queryパラメーターに単に複数のOR条件を設定したときの処理速度は次のようになりました。
単位は「ミリ秒」です。

検証Bで、queryパラメーターに複数のOR条件をAND条件で接続した条件を設定した時の処理速度は次のようになりました。
単位は「ミリ秒」です。

確認内容結果まとめ

  • queryパラメーターに複数のOR条件をAND条件で接続した条件を設定した時の処理速度が、単に複数のOR条件を設定した場合よりも遅くなりました。
  • queryパラメーターに単に複数のOR条件を設定した場合、条件数を増やしてもそこまで処理速度に差が生じませんでした。
  • queryパラメーターに複数のOR条件をAND条件で接続した条件を設定した場合、条件数を増やすと、処理速度が大きく遅延しました。

複数のOR条件を設定する場合の注意点

  • 複数のOR条件をAND条件でつないだ状態での運用をしない。
  • どうしてもその状態での運用が必要な場合、可能な限りOR条件の数を増やさない条件を検討する。
  • 条件設定時には、APIの処理が遅くならないかを確認しながらパラメーターを調整する。

おわりに

「検証Aと検証Bの比較」 で記載したように、queryパラメーターに複数のOR条件をAND条件で接続した条件を設定した場合、リクエストが大幅に遅延するなど、kintoneを快適に使えなくなる場合があります。
「複数のOR条件を設定する場合の注意点」 を参考に、queryパラメーターにおけるOR条件の性質を理解し、使い所を見極めて、複数のレコードを取得しましょう。

information

このTipsは、2024年11月版kintoneで動作を確認しています。