複数のレコードを取得するAPI実行時の注意点 (OR条件について)
はじめに
本記事は、複数のレコードを取得するAPI実行時の注意点について紹介するシリーズの第二弾です。
第一弾の「totalCountパラメーター」の記事に続き、第二弾は「OR条件」の記事となります。
第一弾:
複数のレコードを取得するAPI実行時の注意点 (totalCountパラメーターについて)
この記事では、queryパラメーターに複数のOR条件を指定した際、条件の設定の方法によって、複数のレコードを取得するAPIの実行時の処理速度がどのように変わるかを検証しています。
検証結果から、複数のレコードを取得するAPIを快適に実行してもらうために、queryパラメーターを指定する際の注意点を紹介します。
注意事項
警告
ご利用の環境内のデータ量等の要因により処理速度は変わります。
- 同様のリクエストパラメーターで複数のレコードを取得するAPIを実行した場合に同じ結果を保証するものではありません。
- 将来にわたっても同様の結果になることを保証するものではありません。
queryパラメーターとは?
queryパラメーターとは、複数のレコードを取得するAPIのリクエストパラメーターの1つです。
取得するレコードの絞り込み条件を記述できます。
たとえば、次のようにor
などの絞り込み条件や、order by
といったソート条件を指定できます。
|
|
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
の値を都度変更して実行します。
|
|
具体的な値は次のようになります。
検証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条件の性質を理解し、使い所を見極めて、複数のレコードを取得しましょう。
このTipsは、2024年11月版kintoneで動作を確認しています。