一時的なデータに対してシミュレーションを実行するアプリケーションがあります。計算はあまり複雑ではありませんが、計算には同じシミュレーションで以前に予測された時間的データが必要です。TSQLのカーソルとスカラー関数を置き換える方法
データポイントが15分間隔の1週間のデータを使用したシミュレーションを想定します。次のように予測値のために簡略化計算である:
PredictedValue = A + B + C + D
B、C、及びDの値を取得するために、シミュレーションは、T0、T-1、T-95、T-96で以前に計算されたデータを必要とします、t-672およびt-673。これは、現在および前の間隔、前日の現在および前の間隔、および前の週の現在および前の間隔の時間的データである。
私は実時間でデータをシミュレートする実装を行っていますが、大規模なデータセットではパフォーマンスが極端に悪いです。
実装では、TSQLカーソルを使用して、シミュレーションおよびスカラー関数の時間データをループして、以前に計算されたデータを取得します。
基本的にデータセットが大きければ大きいほど、シミュレーションは遅くなります。たとえば、1日のデータを使用するシミュレーションでは、1分の時間が<になります。 1か月のデータを含むシミュレーションは2〜3日かかります。
カーソルやスカラー関数を使用せずにTSQLコードのパフォーマンスを向上させる方法は本当に興味があります。
は、既存の実装にいくつかのコードを共有しています。カーソルの代わりにセットを使用して書き直すことができます –
コードの一部を投稿できますか? – Beth
日付/時刻に関するパフォーマンスの問題は、索引(またはその欠如)に関連し、WHERE句に不適切な機能を使用することが多いです。 DBエンジンがテーブルのすべての行に関数を適用するように強制するとします。 WHERE YEAR(DATE_COL)> 2000の場合、表が大きくなるとパフォーマンスが低下します。 – HABO