主頁(yè) > 知識(shí)庫(kù) > SqlServer 2005 T-SQL Query 學(xué)習(xí)筆記(3)

SqlServer 2005 T-SQL Query 學(xué)習(xí)筆記(3)

熱門標(biāo)簽:網(wǎng)站排名優(yōu)化 百度競(jìng)價(jià)排名 鐵路電話系統(tǒng) 服務(wù)外包 呼叫中心市場(chǎng)需求 Linux服務(wù)器 AI電銷 地方門戶網(wǎng)站

AD HOC PAGING

就是指用頁(yè)面的序號(hào)和頁(yè)面的大小請(qǐng)求一個(gè)單獨(dú)的頁(yè)面。下面是例子。

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;

 
說(shuō)明:在上個(gè)例子中,其實(shí)SQL只審視了10行(2*5),也就是說(shuō),查看N頁(yè)的話,SQL只查到N的頁(yè)的數(shù)據(jù),N頁(yè)后面的數(shù)據(jù)一概不查看。
 
另外,每當(dāng)移動(dòng)一頁(yè),都會(huì)把這頁(yè)放進(jìn)緩存里,因此每次查詢,就是邏輯查詢(緩存)+物理查詢的過程。物理查詢只需要查詢新請(qǐng)求的頁(yè)即可,其他全部在緩存里執(zhí)行,這樣大大加快了查詢速度。
 
 

MULTIPAGE ACCESS:

如果結(jié)果集不是很大,而且分了多個(gè)請(qǐng)求頁(yè)面,請(qǐng)求也不向前移動(dòng),那么這是一個(gè)好的方案:首先在一個(gè)表里使用ROW_NUMBER具體化所有的頁(yè),然后創(chuàng)建一個(gè)群集索引。下面是例子。

 

首先創(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個(gè)函數(shù)和ROW_NUMBER的區(qū)別是:ROW_NUMBER在ORDER BY的條件里有重復(fù)行存在的話,是把這些重復(fù)行也按INDEX排列的,但是RANK和DENSE RANK總是確定的,即只要是ORDER BY重復(fù)的行,他們是統(tǒng)一INDEX的。

 

RANK和DENSE_RANK的區(qū)別是,RANK是如果上級(jí)的INDEX和下級(jí)的INDEX有可能不是+1關(guān)系,是按下級(jí)真正處于列里的位置進(jìn)行INDEX,而DENSE_RANK是按照跟上級(jí)的INDEX+1的關(guān)系進(jì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ù)一樣,只不過它可以傳入一個(gè)參數(shù),用來(lái)決定最大的INDEX是多少:它會(huì)按行數(shù)進(jìn)行除法,然后平均分配行數(shù)進(jìn)行INDEX的標(biāo)示。

比如,如果有11列,那么首先11/3=3,3列一組作為一個(gè)INDEX,然后,11%3=2,這2列會(huì)分別加在前面的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ù)庫(kù)中指定表(游標(biāo)循環(huán)刪除)
  • 如何在SQL Server 2008下輕松調(diào)試T-SQL語(yǔ)句和存儲(chǔ)過程
  • SQL Server中的T-SQL的基本對(duì)象
  • SqlServer 2005 T-SQL Query 學(xué)習(xí)筆記(4)
  • SqlServer 2005 T-SQL Query 學(xué)習(xí)筆記(2)
  • SqlServer 2005 T-SQL Query 學(xué)習(xí)筆記(1)
  • SQLServer 2008 新增T-SQL 簡(jiǎn)寫語(yǔ)法
  • SQL Server 數(shù)據(jù)庫(kù)管理常用的SQL和T-SQL語(yǔ)句
  • SQL Server 數(shù)據(jù)庫(kù)管理常用的SQL和T-SQL語(yǔ)句
  • SQL Server 數(shù)據(jù)庫(kù)管理常用的SQL和T-SQL語(yǔ)句
  • T-sql語(yǔ)句修改SQL Server數(shù)據(jù)庫(kù)邏輯名、數(shù)據(jù)庫(kù)名、物理名的方法

標(biāo)簽:衡水 蘭州 湖南 仙桃 崇左 湘潭 銅川 黃山

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《SqlServer 2005 T-SQL Query 學(xué)習(xí)筆記(3)》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266