ユーザー数の多いサイトでは、ページングをコードまたはストアド プロシージャで処理する必要があります。キャッシングを使用したことがある場合は、その成功要因を含めてください。
5 に答える
99.9%の確率で、ページングはデータベースサーバーで実行する必要があります。ただし、これを行うためにストアドプロシージャは必要ありません。実際、多くのストアドプロシージャソリューションはカーソルに依存しており、非常に非効率的です。理想的には、データベースプラットフォームに合わせて調整された単一のSQLステートメントを使用して、必要なレコードだけを取得し、それ以上は取得しないようにします。
個人的には、SQL Server の外部でページングすることはありません。これをデータベース レベルで行うのは、ページングするレコードが 100 万件ある場合です。それをアプリケーション レイヤーで取得してそこでページングすると、すでに莫大なコストがかかっています。
私はデータベースレベルでそれを行います。SQL Server 2005 について言えば、新しい ROW_NUMBER() 関数を使用します。次を参照してください: Paging SQL Server 2005 Results
典型的なSQLは次のとおりです。
SELECT Row_Number() OVER(ORDER BY UserName) As RowID, UserFirstName, UserLastName
FROM Users
WHERE RowID Between 0 AND 9
ここhttp://aspnet.4guysfromrolla.com/articles/031506-1.aspxで、それがどのように機能するかを確認し、Scott Mitchell による小さなベンチマークを調べることができます。
ほとんどのデータベースベンダーは、データベースで豊富なページングサポートを提供しています。それを利用してください;-pこれを行うためにストアドプロシージャである必要はないことに注意してください(これまで実行されているストアドプロシージャとアドホックコマンドの議論は避けます)。
余談ですが、多くのフレームワークもこれを効率的に実行します。たとえば、.NET 3.5(LINQを使用)では、データベースで使用されるページングを使用Skip()
して実行できます。Take()
ページングされるレコードの数に依存すると思います。たとえば、ページングするレコードが 100 件あるとします。これを行うために SQL ページングの必要はないと思います。私は常にKISSの原則と時期尚早の最適化を心に留めようとしています.