0

私は一般的なソフトウェアの練習の質問があります、そして多分モデレーターは私のタイトルをよりよく表現することができます。

多数のフィルターがある「ユーザーの管理」ページのページ結果のリストを読み込んでいます。

私のシステムには3000人のユーザーがいて、ページごとに25人を表示し、下部にページ付けコントロールを表示したいと思います。問題ない。これが問題です...

ページの上部に、条件に2300が一致することを示したいので、同じSQLクエリを2回実行します。1回はオブジェクトに組み込むための25レコードの制限があります(ページネーション用)。 )、そして再び制約のない合計数を取得します。

これはパフォーマンスが悪いようです。2つのSQLクエリを実行せずにこれを行うための好ましい方法はありますか?

4

2 に答える 2

1

私は同様の問題を解決し、2つのクエリアプローチを採用しました。最初のクエリはデータの現在のページ(つまり25行)を取得し、もう1つは合計数を取得するために使用されました。

あなたの質問から、2番目のクエリでデータセット全体を取得しているように見えます。他の人が言っているように、代わりに行数だけを取得する方がはるかに良いでしょう。

2番目のクエリで行数のみを取得すると処理速度が向上しますが、データを読み込むたびに実行するのを避けたい場合は、ページが最初に読み込まれたときに1回だけ実行して、結果をセッションに保存するか、ビューステート。もちろん、これは、行数が変更されるとカウントが古くなる可能性があることを意味するため、この場合のパフォーマンスに対する精度のメリットを評価する必要があります。

于 2012-11-10T05:15:36.710 に答える
0

同じクエリを実行しないでくださいCount(*)。例えば:

Select top 25 Name, Country, SomethingElse from SomeTable where Name like @name

Select Count(*) from SomeTable where Name like @name

これは、NHibernateやEntityFrameworkなどのORMを使用すると簡単に実現できます。昔ながらのSQLの場合は、両方のクエリを作成する必要があります。

それが役に立てば幸い。

于 2012-11-10T05:56:02.677 に答える