sql >> データベース >  >> RDS >> Sqlserver

10.000 行を超えるトリプル内部結合と asp-calculations ストール アプリケーション

    SQL に ORDER BY 句があることに注意しながら、これを分析してみましょう:-

    do until rs.eof 
      response.flush 
      counter = counter + 1 
    
      ' A LOT of calculations and putting in array... 
    
      rs.movenext 
    loop
      

    Response.Flush に注意してください 、私が最初にすることは、それを取り除くことです。おそらく、(IIS マネージャーで) ASP 応答のバッファリング制限を増やす必要があります。 Flush は、こ​​れまでに生成されたコンテンツをクライアントに送信しています。送信されたすべてのパケットの受信をクライアントが確認するのを待ってから、完了します。ここで、5 分以上の 90% が費やされていると推測します。

    今「たくさんの計算」。 VBScript のパフォーマンスは不明です。このコードには時間がかかる場合があります。場合によっては、一部の計算はスクリプトよりも SQL の方がはるかに優れているため、これは 1 つのオプションです。もう 1 つの方法は、複雑な作業を行うために COM でコンパイルされたコンポーネントを構築することです (ただし、マーシャリングのためにいくつかのアカウンティングが必要になるため、利点が失われる可能性があります)。ただし、これらの計算を VBScript で行う必要があることは避けられない場合があります。

    rs.movenext .このループは、処理が必要なほとんどの時間、接続と行セットを開いたままにしておくことを意味します。つまり、サーバーがネットワークを介してクライアントにバイトを送信している間、および VBScript が数値を処理している間です。はるかに優れたアプローチは、すべての行セットをすばやく吸い上げて DB から切断することです。 数を処理し、最後に バッファをクライアントにダンプします。

    切断されたレコードセット (クライアント側の静的カーソルを指定) または単純な GetRows の使用を検討してください 行セット全体を 2 次元配列にダンプするレコードセット オブジェクトのメソッド。これは、可能な限り短い時間でさまざまなテーブルのロックを維持することを意味します。



    1. PHPMYSQLクエリアルゴリズムヘルプ

    2. 一意のフィールドがないテーブルに行がまだ存在しない場合は、mysqlを挿入します

    3. SQLから列コメントを取得する方法

    4. 存在しない場合はMySQLINSERT(主キーを使用しない)