テーブルクエリの最小化
クエリを最小限に抑えてパフォーマンスを最大化する方法について説明します。
クエリーが多いほど、パフォーマンスへの影響が大きくなります。この記事では、クエリを最小限に抑えてパフォーマンスを可能な限り高速に保つ 2 つの方法について説明します。
実装ルール
構成を作成するときは、クエリーを最小限に抑えるために構成を実装する方法を検討します。
たとえば、さまざまなコンポーネントの長さ、幅、高さのテーブルがあるとします。部品番号を選択したら、それらの値を照会して体積を計算します。その情報をクエリする最適な方法は、ユースケースと、クエリの下流で値が必要な場所によって異なります。
構成で合計ボリュームのみを使用する場合は、次の簡略化されたコードのように、ボリュームの詳細判別ルールに照会を配置するのが最善の方法です。
- テーブルから L、W、H をクエリ
- var vol=L*W*H
- ボリュームを返す
合計クエリ数:1。
ただし、ボリュームルールを記述していて、長さ、幅、高さの値を他の場所で使用する必要があることがわかっている場合は、上記のコードは適切ではありません。代わりに、決定ルールを次のように記述する必要があります。
- Var vol = L*W*H
- ボリュームを返す
決定ルールにクエリが含まれている必要があります。決定ルールは一度に 1 つのフィールドしか定義できないため、これには 3 つの決定ルール (長さ、幅、高さのルールがそれぞれ 1 つずつ) と 3 つのクエリーが必要になります。これを行うと、4 番目のクエリ (長さ、幅、高さの各ルールに 1 つ、ボリューム決定ルールに 1 つ) が実行されなくなります。
クエリを減らすもう 1 つの方法は、ルールに関連付けられたフィールドに注意することです。多くのフィールドを参照するルールのクエリがあるとします。そのルールに関連付けられているフィールドのいずれかが変更されるたびに、ルールが実行されます。したがって、クエリは毎回実行されます。
体積を計算し、その体積に密度 (ユーザーが選択した素材に基づいて変化する可能性があります) を掛けて総重量を求める必要があるとします。ユーザーは、下流の他の場所でボリュームを使用する必要はありません。サンプルスクリプトを次に示します。
- テーブルから L、W、H をクエリ
- Var vol= L*W*H
- Var mass = vol * cfg.density
- 質量を返す
問題は、密度が変化するたびにルールが実行され、クエリが実行されることです。しかし、L、W、Hの値は変わりません。したがって、プロセッサーはテーブルに移動し、L、W、H の値を見つけて、変数 vol を以前と同じ値に再定義する必要があります。より良いアプローチは、別のルールを持つ別のフィールドとしてボリュームを計算することです。次に、次のようにマスルールを記述します。
var mass = cfg.volume * cfg.density;
return mass;
質量は毎回再計算されますが、これは意図されています。不要なクエリや値の再定義で処理時間を無駄にすることはありません。
リストのクエリ
上記の L、W、H で示したように、1 回のクエリでテーブルから複数の列をプルできます。また、複数の値でテーブルをクエリしたい場合もあります。たとえば、さまざまな色の複数選択の選択リスト (フィールド名 selectedColors) があるとします。また、比率を示す赤、青、緑の列がある「色相」テーブルもあります。
複数選択選択リストの選択されたすべてのオプションをテーブルにクエリする場合は、2 つのオプションがあります。
for (color of cfg.selectedColors){
var tableResults=lookup(“Select blue, red, green from hues where value := value”, {“value”: color});
//more code
この for ループは、クエリの数が selectedColors フィールドで選択されたオプションの数に基づいていることを意味します。または、次のコードでテーブルを 1 回クエリします。
var tableResults=lookup(“select blue, red, green from hues where value in (:list)”, {“list”: cfg.selectedColors});
この方法の方が良いです。
クエリでサポートされている内容の詳細については、「 ルックアップ関数:コマンドと構文」を参照してください。