複数の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を比較する他のポイントはありますか?