AD HOC PAGING:
就是指用頁面的序號和頁面的大小請求一個單獨的頁面。下面是例子。
DECLARE @pagesize AS INT, @pagenum AS INT;
SET @pagesize = 5;
SET @pagenum = 2;
WITH SalesCTE AS
(
SELECT ROW_NUMBER() OVER(ORDER BY qty, empid) AS rownum,
empid, mgrid, qty
FROM dbo.Sales
)
SELECT rownum, empid, mgrid, qty
FROM SalesCTE
WHERE rownum > @pagesize * (@pagenum-1)
AND rownum = @pagesize * @pagenum
ORDER BY rownum;
說明:在上個例子中,其實SQL只審視了10行(2*5),也就是說,查看N頁的話,SQL只查到N的頁的數(shù)據(jù),N頁后面的數(shù)據(jù)一概不查看。
另外,每當移動一頁,都會把這頁放進緩存里,因此每次查詢,就是邏輯查詢(緩存)+物理查詢的過程。物理查詢只需要查詢新請求的頁即可,其他全部在緩存里執(zhí)行,這樣大大加快了查詢速度。
MULTIPAGE ACCESS:
如果結(jié)果集不是很大,而且分了多個請求頁面,請求也不向前移動,那么這是一個好的方案:首先在一個表里使用ROW_NUMBER具體化所有的頁,然后創(chuàng)建一個群集索引。下面是例子。
首先創(chuàng)建按ROW_NUMBER把列編好,
SELECT ROW_NUMBER() OVER(ORDER BY qty, empid) AS rownum, empid, mgrid, qty INTO #SalesRN FROM dbo.Sales;
CREATE UNIQUE CLUSTERED INDEX idx_rn ON #SalesRN(rownum);
然后直接按ROWNUM查詢,
DECLARE @pagesize AS INT, @pagenum AS INT; SET @pagesize = 5; SET @pagenum = 2;
SELECT rownum, empid, mgrid, qty FROM #SalesRN WHERE rownum BETWEEN @pagesize *
(@pagenum-1) + 1 AND @pagesize * @pagenum ORDER BY rownum;
RANK DENSE RANK
這2個函數(shù)和ROW_NUMBER的區(qū)別是:ROW_NUMBER在ORDER BY的條件里有重復行存在的話,是把這些重復行也按INDEX排列的,但是RANK和DENSE RANK總是確定的,即只要是ORDER BY重復的行,他們是統(tǒng)一INDEX的。
RANK和DENSE_RANK的區(qū)別是,RANK是如果上級的INDEX和下級的INDEX有可能不是+1關(guān)系,是按下級真正處于列里的位置進行INDEX,而DENSE_RANK是按照跟上級的INDEX+1的關(guān)系進行的編碼。
比如:
SELECT empid, qty, RANK() OVER(ORDER BY qty) AS rnk, DENSE_RANK() OVER(ORDER BY qty) AS drnk FROM dbo.Sales ORDER BY qty;
NTILE
NTILE的用法和其他的RANK函數(shù)一樣,只不過它可以傳入一個參數(shù),用來決定最大的INDEX是多少:它會按行數(shù)進行除法,然后平均分配行數(shù)進行INDEX的標示。
比如,如果有11列,那么首先11/3=3,3列一組作為一個INDEX,然后,11%3=2,這2列會分別加在前面的2組上。
比如,
SELECT empid, qty,
CASE NTILE(3) OVER(ORDER BY qty, empid)
WHEN 1 THEN 'low'
WHEN 2 THEN 'medium'
WHEN 3 THEN 'high'
END AS lvl
FROM dbo.Sales
ORDER BY qty, empid;
您可能感興趣的文章:- SQLServer用t-sql命令批量刪除數(shù)據(jù)庫中指定表(游標循環(huán)刪除)
- 如何在SQL Server 2008下輕松調(diào)試T-SQL語句和存儲過程
- SQL Server中的T-SQL的基本對象
- SqlServer 2005 T-SQL Query 學習筆記(4)
- SqlServer 2005 T-SQL Query 學習筆記(2)
- SqlServer 2005 T-SQL Query 學習筆記(1)
- SQLServer 2008 新增T-SQL 簡寫語法
- SQL Server 數(shù)據(jù)庫管理常用的SQL和T-SQL語句
- SQL Server 數(shù)據(jù)庫管理常用的SQL和T-SQL語句
- SQL Server 數(shù)據(jù)庫管理常用的SQL和T-SQL語句
- T-sql語句修改SQL Server數(shù)據(jù)庫邏輯名、數(shù)據(jù)庫名、物理名的方法