質問

0.1秒ごとに収集されたレコードを含むデータベースがあり、特定の日から20分に1回までデータを平均する必要があります。したがって、平均24*3の値である20分ごとに1日分のデータを返す必要があります。
現在、1日以内に20分ごとにデータベースに別のAVGコールを行います。これは24*3コールです。データベースへの接続は少し遅いように見えます(リモートです)。すべての平均を行うには5分かかります。 1日分のデータにアクセスし、平均20分ごとに1回のクエリを実行する方が速いでしょうか?質問に答えるのに役立つ場合は、平均化する前にデータに対して算術を行う必要があります。つまり、いくつかのテーブル列に掛けられます。

役に立ちましたか?

解決

真夜中以降の数分数を次のように計算できます。

datepart(hh,datecolumn)*60 + datepart(mi,datecolumn)

それを20で割ると、20分間隔の数が得られます。例えば、 00:10 間隔に落ちるでしょう 0, 00:30 間隔 1, 、 と 15:30 間隔 46, 、 等々。この式を使用すると、次のような20分間隔でグループ化できます。

select
    (datepart(hh,datecolumn)*60 + datepart(mi,datecolumn)) / 20 as IntervalNr
,   avg(value)
from      YourTable
group by  (datepart(hh,datecolumn)*60 + datepart(mi,datecolumn)) / 20

内部で数学を行うことができます avg 電話してください:

avg(col1 * col2 - col3 / col4)

他のヒント

一般に、クエリの数を減らすことは良い考えです。クエリで可能な算術/フィルタリング/グループ化を何でも集計して実行し、サーバー側で「反復」計算(PHPの例など)を実行します。

それがより速くなるかどうかを確認するには、測定する必要があります。

ただし、データベースへの接続が遅いため、より速くなります。これにより、往復の数は、実行時間の合計に大きな影響を与えます。

データベースのストアドプロシージャはどうですか?データベースエンジンがサポートされていない場合、スクリプトを持っているか、数学を実行し、データベースサーバーに個別の「平均」テーブルを入力するのはどうでしょうか。その後、1日に1回だけのリモートクライアントからの平均を読む必要があります。

1つのクエリでの計算はやや高速になります。接続の設定、クエリの解析、ストアドプロシージャのロードなど、複数のリクエストでオーバーヘッドを考えてください。

また、ヒューのパフォーマンスが向上する可能性のある正確な指標を確認してください。 Hughデータベースの一部の操作は数分から数時間続く場合があります。

多くのデータを送信している場合、接続がボトルネックである場合、データをグループ化して送信する方法といつデータを送信するかは重要ではありません。 56Kモデムで10分ごとに100MBを送信する良い方法はありません。データのサイズと帯域幅を把握し、送信できることを確認してください。

そうは言った:

まず、ネットワークがボトルネックであることを確認してください。その場合は、可能であれば小さなデータセットを使用して、さまざまなシナリオをテストしてみてください。一般に、1つの大きなレコードセットでは、サイズの半分の2つのレコードセットよりも帯域幅が少なくなります。

可能であれば、テーブルに列を追加し、データベースにデータを投稿するたびに、列製品とインターバルインデックス(Andomarの投稿を参照)を計算して保存します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top