2

複数のJOINとルックアップを適用し、コンマ区切り値などの複雑なフィルターを使用する複雑なSPを使用しています。さらに、2つの複雑でありながらパフォーマンスに優れた機能を展開する必要があります。

1.動的ソートですが、制限があります。長い/不器用なCASE階層をご存知でしょう。専門家が、これが私たちが得た唯一の「最良の」ソリューションであることに同意するのは奇妙なことです。

SQLストアドプロシージャ内の動的ソート http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=5942

とにかく、今のところこれにはあまり期待していません。

2.動的ページネーション-つまり、SPがY(Y =ページ番号)から始まるX個のレコード(X =ページサイズ)のみを返すことができるようにしたいのです。私はあなたが一般的な考えを持っていることを望みます。

より明確にするために、MySQLとPostgreSQLで利用可能なものを使用したいと思います。

[LIMIT { number | ALL }] [OFFSET number]

データベース:SQLページネーション? http://www.sql.org/sql-database/postgresql/manual/queries-limit.html

その奇妙なそのような単純で基本的な機能はSQL2005+では利用できません..または私は間違っています(私はそれを聞いてうれしいです:-))


パフォーマンスと複雑さのトレードオフに適した2つのアプローチを知っています-

[2.1] SQL 2005の「RowNumber()」機能を使用してからフィルターを適用する:(過去に使用したことがあります)

WHERE (Row BETWEEN (@PageIndex-1) * @PageSize +1 AND @PageIndex* @PageSize)

ただし、これも一時テーブルを作成するか、WITH句を使用する必要があります。これについては、SQLServerの行オフセットでも説明され ています。

[2.2]私はいくつかの新しい方法を見つけました。それらの1つは使用しています

SET ROWCOUNT

http://www.4guysfromrolla.com/webtech/042606-1.shtml

そして彼らは全体的な2.2が2.1より効果的であると言います。それは...ですか?また、2つのユーザーリクエストが同じSPを同時に2回トリガーした場合にどうなるかを知りたいと思いました。同時に、SP呼び出し間で「SETROWCOUNT」が「共有」または「上書き」されないことを願っています。plsは確認します。2.1と2.2を比較する他のポイントはありますか?

4

1 に答える 1

0

どちらのアプローチも優れていると思います。要件に最も適したものを選択できます。


パフォーマンスと複雑さのトレードオフに適した2つのアプローチを知っています-

[2.1] SQL 2005の「RowNumber()」機能を使用してからフィルターを適用する:(過去に使用したことがあります)

WHERE (Row BETWEEN (@PageIndex-1) * @PageSize +1 AND @PageIndex* @PageSize)

ただし、これも一時テーブルを作成するか、WITH句を使用する必要があります。これについては、SQLServerの行オフセットでも説明され ています。

[2.2]私はいくつかの新しい方法を見つけました。それらの1つは使用しています

SET ROWCOUNT

http://www.4guysfromrolla.com/webtech/042606-1.shtml

そして彼らは全体的な2.2が2.1より効果的であると言います。それは...ですか?また、2つのユーザーリクエストが同じSPを同時に2回トリガーした場合にどうなるかを知りたいと思いました。同時に、SP呼び出し間で「SETROWCOUNT」が「共有」または「上書き」されないことを願っています。plsは確認します。2.1と2.2を比較する他のポイントはありますか?

于 2012-08-30T15:32:27.357 に答える