3

私の質問に答えるには、本当に専門家の助けが必要です。

シナリオは次のとおりです。

sqlselectクエリを使用して100万件のレコードを取得しています。データテーブルに(1回の実行で)格納し、グループ化と並べ替えのためにループする結果のレコードに対して、並べ替えとグループ化を実行する必要があります。私はこれがとても幼稚であり、それを処理する正しい方法ではないことを知っています。どうすれば100万件のレコードを効果的に管理し、グループ化と並べ替えを適用できますか?

本当にここで助けが必要です。選択クエリをバッチで実行することを聞いたことがありますが、データ全体が手元にないときにグループ化と並べ替えを実装するにはどうすればよいですか?SQLの順序付けとグループ化を直接行うことはできません。これは私の要件に反します。

これが私が今していることです:

次のオブジェクトがあります。つまり、グループ化と並べ替えの列名です。

List<Group> groupList;
List<Sort> sortList;
DataTable reportData; // Here im having the entire records from db

'reportData'を行ごとにループし、カスタムのグループ化と並べ替えのために現在の行と前の行を照合します。バッチ実行を使用している場合、または代替ソリューションがある場合に、同じことがどのように実行できるか知りたいですか?

4

4 に答える 4

4

結果のレコードに対してソートとグループ化を実行する必要があります。これはデータテーブルに格納され(1回の実行で)、ループしてグループ化とソートを行います。

何のために?

真剣に。

引っ張らないで、後ろに愚かなオブジェクトモデルを置いてスマートにプレイしてみてください(そして、データセットは特にスマートではありません、申し訳ありません)。

selectステートメントでグループ化して並べ替え、すでにグループ化および結合されているデータをプルして、それで完了です。

17年前に元のバージョンがリリースされたとき(4.2でした、sysase SQLサーバーのポート)、100万レコードはSQLサーバーにとって少量のデータでした。最近では、プロセッサの第 3 レベルのキャッシュに収まる可能性が高く、適切な SQL サーバーでさえ、処理されたことに気付くものではありません。

SQL は特に優れた広告プロジェクトであり、MARS が導入されて以来、1 つの接続で複数のクエリを実行することもできるため、ここで便利です。

ですから、戻って、データセットを破棄し、「ソート アルゴをプログラムしようとしています」と、必要に応じてデータを取得するための適切な SQL ステートメントを作成します。

于 2012-04-06T08:22:06.063 に答える
0

私が正しく理解していれば、あなたの場合、特にグループ化をカバーするために必要な構造を持つ一時データベース テーブルを作成します。

次に、メイン テーブルからレコードを選択し、それらを一時テーブルに挿入して、グループ化を含むすべての変更を適用します。

並べ替え方法に関する特定のインデックスも適用する必要があります。

その後、このテーブルから選択し、必要な処理を行い、最後にデータが不要になったら一時テーブルを削除します。

メモリ内の何百万ものレコードが私にとって厄介なにおいがするので、私は上記の解決策を選択します...

于 2012-04-06T06:25:02.690 に答える
0

Partition Pruningを実装する必要があるようです。パーティショニングにより、クエリを高速化するために要求しているようなコンテンツの分離が可能になります。

于 2012-04-06T04:30:38.520 に答える
-1

例えば:

1. DocumentTypeID でグループ化するとします。

var groupByType = reportData.GroupBy(g=>g.DocumentTypeID); 

2. アルファベット順のソート

 var sortAlphabetically = reportData.OrderBy(g=>g.DocumentName);

3. グループ化とソート

var groupAndSort = reportData.GroupBy(g=>g.DocumentTypeID)
                             .OrderBy(g=>g.DocumentName);

4. 並べ替えとグループ化

var groupAndSort = reportData.OrderBy(g=>g.DocumentName)
                             .GroupBy(g=>g.DocumentTypeID);

5. 複数のグループ化と並べ替え

var multipleGroupAndSort = reportData.GroupBy(g=>g.DocumentTypeID)
                                     .GroupBy(g=>g.CreatedOnDate.Month)
                                     .OrderBy(g=>g.DocumentName);

などなど...

しかし、何百万行もアプリケーションに持ち込むことはお勧めできません。メモリがかかります。もちろん、ストアドプロシージャなどを介して管理する方法があります。

于 2012-04-06T04:44:11.117 に答える