入力サイズの制御

文の入力サイズは、問合せの評価時間の長さに大きな影響を与えることがあります。

文の入力は、FROM句で定義されます。FROM句が存在しない場合の入力のデフォルトは、NavStateRecordsです。可能であれば、コーパスのレコードではなく、完了した別の文(または指定した状態)からの結果を使用してください。これは、不要なレコードが入力されるのを防ぐためです。

次のような問合せがあるとします。最初の問合せでは、各文の入力サイズはナビゲーション・ステートとほぼ同じです。最初の2つの文(SumsとTotals)で、データを2つの粒度で集計します。最後の文で、データセットに再びアクセスしますが、その唯一の目的は、データ内に存在する月/年の組合せを特定することです。対象の計算は、計算済の結果から導出されます。
DEFINE Sums AS SELECT
  SUM(a) AS MonthlyTotal
GROUP BY month,year;

DEFINE Totals AS SELECT
  SUM(a) AS YearlyTotal
GROUP BY year;

DEFINE Result AS SELECT
  Sums[month,year].MonthlyTotal AS MonthlyTotal,
  Sums[month,year].MonthlyTotal/Totals[year].YearlyTotal AS Fraction
GROUP BY month,year
次のように書き換えた問合せでは、索引が1回しかアクセスされません。最初の文で索引にアクセスして、月別の合計を計算します。2番目の文は修正されており、最初の文の結果を使用して年間合計を計算するようになっています。月ごとに多数のレコードが存在するとして、節約効果は何倍にもなります。最後の文も修正されており、最初の文の結果を使用するようになっています。すでに最初の文で、データセット内の有効な月/年の組合せがすべて特定されています。有効な組合せを特定するために、より大きなデータセット(数百万レコードに及ぶ可能性がある)にアクセスするかわりに、月/年のペアを、前の結果からのはるかに小さなデータセット(おそらく数十レコード)から読み取ります。
DEFINE Sums AS SELECT
  SUM(a) AS MonthlyTotal
GROUP BY month,year;

DEFINE Totals AS SELECT
  SUM(MonthlyTotal) AS YearlyTotal
FROM Sums
GROUP year;

DEFINE Result AS SELECT
  MonthlyTotal AS MonthlyTotal,
  MonthlyTotal/Totals[year].YearlyTotal AS Fraction
FROM Sums

データセット・サイズとは無関係な定数の定義

一般的な慣行の1つに、単一グループを使用した問合せ用の定数の定義があります。次に示す最初の問合せを参照してください。この問合せの入力はナビゲーション・ステート全体ですが、その入力からのデータは何も使用されません。
DEFINE Constants AS SELECT
  500 AS DefaultQuota
GROUP
入力データは実際にはまったく必要ないため、入力を可能なかぎり小さく絞り込みます。それには、非常に限定的なフィルタを使用します。たとえば、この2番目の例に示すようなものです。
DEFINE Constants AS SELECT
  500 AS DefaultQuota
WHERE "mdex-property_Key" IS NOT NULL
GROUP