SQL改ページに関するお問い合わせ

3539 ワード

一つ目は前のページgesize*pagecount条に記録されている逆順の中の前のページgesize条を取って記録し、また正順に来ます。
ページごとにデータがあることは保証できますが、最後のページと最後のページの二ページが重複している可能性があります。
select*from(  
select TOP 6*FROM( 
SELECT TOP 6* 
from logo gudods 
Where NuCLASSES ID=1
ORDER BY NUGOOD S ID ASC) 
as aSysTable  
ORDER BY NUGOOD S ID DESC)
 as bSysTable  
ORDER BY N_GOODS_ID ASC
はい、すごいのを見つけます。
この転載は李洪根さんのブログから来ました。作者はマイクロソフトのMVPです。以下の3つの案を参考にして、実際の状況に合わせて選んでください。
テーブルを作成:
CREATE TABLE[TestTable](
 [ID][int]IDENTITY(1,1)NOT NULL、
 [First Name][nvarrhal](100)COLLATE Chinese euPRC CI_ASNULL、
 [LastName][nvarrhar](100)COLLATE Chinese euPRC CI_ASNULL、
 [Country][nvarrhal](50)COLLATE Chinese euPRC CI AS NULL、
 [Note][nvarrhal](2000)COLLATE Chinese euPRC CI NULL 
)ON[PRIMARY]
GO
 
挿入データ:(2万本以上、より多くのデータでテストすると明らかになります。)
SET IDENTITY_INSERT TestTable ON
declare@i int
set@i=1
while@i<=20000
begin
    insert into TestTable([id],First Name,LastName,Country,Note)values(@i,'First NameuXXX','LastNameuXXX','Country_XXX','Noteu XXX')
    set@i=@i+1
end
SET IDENTITY_INSERT TestTable OFF
 
-----------------------
改ページ案一:(Not InとSELECT TOPの改ページを利用する)語句形式:
SELECT TOP 10*
FROM TestTable
WHERE(ID NOT IN
          (SELECT TOP 20 id
         FROM TestTable
         ORDER BY id))
ORDER BY ID
SELECT TOPページサイズ*
FROM TestTable
WHERE(ID NOT IN
          (SELECT TOPページサイズ*ページ数id
         FROM表
         ORDER BY id))
ORDER BY ID
-----------------------
改ページ案二:(利用IDがどれぐらい大きいかとSELECT TOP分ページ)
ステートメント形式:
SELECT TOP 10*
FROM TestTable
WHERE(ID>
          (SELECT MAX(id)
         FROM(SELECT TOP 20 id
                 FROM TestTable
                 ORDER BY id)AS)
ORDER BY ID
SELECT TOPページサイズ*
FROM TestTable
WHERE(ID>
          (SELECT MAX(id)
         FROM(SELECT TOPページサイズ*ページ数id
                 FROM表
                 ORDER BY id)AS)
ORDER BY ID
-----------------------
改ページ案3:(SQLを利用したラベル保存プロセスの改ページ)
create  procedure XiaoZhengGe
@sqlstr nvarhar(4000)--検索文字列
@currentpage int、 --第Nページ
@pagesize int --各ページの行数
as
set nocount on
declare@P 1 int、 --P 1はランドマークのidです
 @rowcount int
exec spursoropen@P 1 output、@sqlstr、@scrollot=1、@cctopt=1、@rowcount=@rowcount output
select ceiling(1.0*@rowcount/@pagesize)as総ページ数--、@rowcount as総行数、@currentpage as現在ページ 
set@currentpage=(@currentpage-1)*@pagesize+1
exec spucursorfetch@P 1,16、@currentpage、@pagesize 
exec spucursorcelose@P 1
set nocount off
 
他の案:メインキーがないなら、臨時テーブルを使ってもいいし、案三で作ってもいいですが、効率は低いです。
最適化を提案する場合は、メインキーと索引を加えて、検索効率が向上します。
 
SQLで分析器を調べて、比較を示しました。私の結論は、改ページ案の二:(IDを利用してどれぐらい大きいかとSELECT TOP改ページより)効率が一番高いです。SQL文の改ページ案をつづり合わせる必要があります。(Not InとSELECT TOP改ページを利用して)   効率的には、SQL文の改ページ案の3つをつなぎ合わせる必要があります。(SQLを利用した游び标保存プロセスの改ページ)    効率は最悪ですが、一番通用します。
実際の状況の中で、具体的に分析します。
はい、ここでちょっと変な方法をください。
まずすべてのデータを読んで、あなたのウェブページのスクリプトプログラムでループします。記録が必要になるまで。
以下のJSPコード:
rs=state.executeQuery(「Select*from logo ugoods Where NuCLASSES ID=」+classide);
while(s.next(){
if('(pagenum-1)*pagesize){
contine;
)
if(i//レコードの読み込み、保存
)
else{
break;
)
)

この方法は、廃棄されていると知っていますが、いったいどこに廃棄されているのか、牛たちに教えてもらいたいです。