2012-03-23 7 views
5

いくつかの計算を行うためにいくつかの内部結合とクロス適用文を持つかなり大きなSQL文があり、前の問合せに基づいて各エントリに新しい列が作成されます。大きなSQL文を実行してグリッドビューを設定する

グリッドビューを作成するコードでC#からこのクエリを実行するのが最も効率的/最善の方法は何でしょうか?

SQLを突破し、C#で計算を書きますか?

ストアドプロシージャの作成?

sqlを文字列として渡してデータセットを作成し、データセットをgridviewにバインドするだけで時間がかかるようです。

+0

1)返されたデータセットの大きさ(行と列)はどれくらいですか?2)SQL文を表示します。 – RBarryYoung

+0

** LINQ **を使用したい場合は、** C#**コードで計算を簡単に行うことができます –

+0

ここにSQLを載せたいとは思っていませんが、より一般的な...それは10,000行までの検索とそれに少なくとも30列ある検索に依存することができます – user1186144

答えて

3

あなたの中心的な問題は、データベースクエリがより速く実行されなければならないということです。これを解決すると、それに応じてコードを調整することができます。

まず、データベースのインデックスを最適化してクエリのパフォーマンスを向上させます。可能であればSQL ProfilerIndex Tuning Wizardを使用してください(これらのツールはExpress EditionのSQL Serverでは使用できません)。新しいインデックスでは挿入によってパフォーマンスが低下する可能性があるので、データベースで高いトランザクション量をサポートする必要がある場合は、この方法を使用することに注意する必要があります。

クエリを部分に分解し、結果を手順コードで集計することでクエリのパフォーマンスを向上させる方法が見つかった場合は、ObjectDataSourceに移動すると意味があります。これにより、データの取得方法を最大限柔軟に設定できます。

開始点として、SQLエディタでクエリやクエリの一部をプロトタイプ化して、ASP.NETコードの変更方法を決定する前にクエリの最適化に集中することができます。

あなたのスキーマや使用しているクエリの詳細を見ずに、データ抽出を最適化する方法については、これ以上コメントできません。しかし、これはあなたが正しい方向に行くようにする必要があります。

+0

私はこれを試し、クエリを最適化し、ストアドプロシージャとして実行すると思います – user1186144

1

コード内のどこからでもSQLスクリプトを実行していますか(つまり、どのようにデータにアクセスするかの決定に達していますか?)私が尋ねる理由は、私が最近、ADO.NETエンティティ・フレームワーク・モデルを使用して、データベースと、データベース内のデータから作業したい概念的オブジェクトとのギャップを埋めることです。本当に簡単にぶら下がります。 EFモデルを実装したら、単にストアドプロシージャを呼び出す場合です(はい、ストアドプロシージャでクエリを保持することをお勧めします)。EFモデルによって生成され、クラスにフェッチされるメソッドを使用しますモデルによって自動的に作成されます)。プロシージャから取得したばかりのクラスのリストは、好きなコントロールに明示的にバインドできます。

http://msdn.microsoft.com/en-us/data/ff191186

それは知っている価値があります。

+0

私はどちらもあなたに印を付けていません – user1186144

+0

誰も投票権があります。 –

+1

一般的に、エンティティフレームワークモデルを選択するのに悪いアドバイス! "たくさんの"?私は実際に「多くの」点を正直に言って思い出していない。私が作った2つの提案はEFモデル(広く使われているもので何も間違っていないもの)を実装することであり、スクリプトはプロシージャこのスレッドの他の多くの人が私に同意します)。また、自分の編集を受け入れないことが苦いと思います。あなたの答えのスペルや文法は、たくさん残っています。 –

-2

私はグリッドビューを作成するコードでC#からこのクエリを実行するのが最も効率的/最善の方法は何だろうと思っていましたか?

あなたが最初に考えなければならないバージョンは1つだけですか?

テーブルを返すクエリを実行する唯一の方法は、DataReaderを返すコマンドを実行することです。ポイント。 SQLが与えられれば、それはそれです。代替手段は存在しない。

注:ここで捨てたいかもしれない他のすべてのものは、内部的に使用します。彼らはそれを包みます。

SQLを分割してC#で計算を書きますか?

私の好きな食べ物は?教えてください。ハードウェア、データ量、およびクエリに大きく依存します。答えることはできません。

ストアドプロシージャの作成?

違いはありません。

sqlを文字列として渡してデータセットを作成し、データセットをgridviewにバインドするだけで時間がかかるようです。

  • 何が長すぎますか?
  • どのような時間がかかりますか? 1億行を読み込んでいますか? SQL Serverの処理? optmizationを決定するすべてのもの。関連情報を提供してください - 時間がどこに費やされているかをお知らせください。

それはデータセットを使用していませんが、バックグラウンドで記入したオブジェクトの観察可能なコレクションは、少なくともリストの入力中に結果が表示されるようにします。

+0

私はあなたに印をつけませんでしたBTW – user1186144

+4

私はしました。私は「私の好きな食べ物は何ですか?教えてください'。ただの助けと助言を求めている人のために、皮肉に境界を定める。ストアドプロシージャを作成することで、パフォーマンスに関係なく、組織と適切な構造をソリューションに適用するかが異なります。また、スペルや文法は「壁の上に」あります。編集を受け入れるつもりでない場合は、下の投票を受け入れます。 –

+0

私は友好的ではありません。私は親切に定期的に与えられた助けを返すために最善を尽くすためにここにいます、そして、私はちょうどそれをやったと思います。私は世界中の多くのソフトウェア開発者にとって、私とあなたよりも優れたソリューションを毎日業界標準のソリューションで使用するというソリューションを勧めました。私は今あなたを理解するのに苦労しています。 –

2

あなたの問題は、すべてのSELECTで高価な計算を実行しているようです。 これを適切に解決するには、計算結果を事前に計算してデータベースに格納する必要があります。そのため、グリッドは計算を行わずにデータを読み取るだけです。

基礎となるデータが変更された場合に、結果の再計算をトリガーできます。トリガを使用するか、C#コードから計算を実装するsprocを呼び出します。

関連する問題