成人午夜激情影院,小视频免费在线观看,国产精品夜夜嗨,欧美日韩精品一区二区在线播放

實(shí)現(xiàn)千萬級數(shù)據(jù)分頁的存儲過程

2010-08-28 10:49:35來源:西部e網(wǎng)作者:

經(jīng)測試,在 14483461 條記錄中查詢第 100000 頁,每頁 10 條記錄按升序和降序第一次時(shí)間均為 0.47 秒,第二次時(shí)間均為 0.43 秒,測試語法如下:
 exec GetRecordFromPage news,newsid,10,100000
 news 為 表名, newsid 為關(guān)鍵字段, 使用時(shí)請先對 newsid 建立索引。
*/

/*
 函數(shù)名稱: GetRecordFromPage
 函數(shù)功能: 獲取指定頁的數(shù)據(jù)
 參數(shù)說明: @tblName   包含數(shù)據(jù)的表名
      @fldName   關(guān)鍵字段名
      @PageSize   每頁記錄數(shù)
      @PageIndex  要獲取的頁碼
      @OrderType  排序類型, 0 - 升序, 1 - 降序
      @strWhere   查詢條件 (注意: 不要加 where)
 作  者: 鐵拳
 郵  箱: sunjianhua_kki@sina.com
 創(chuàng)建時(shí)間: 2004-07-04
 修改時(shí)間: 2004-07-04
*/
CREATE PROCEDURE GetRecordFromPage
  @tblName   varchar(255),    -- 表名
  @fldName   varchar(255),    -- 字段名
  @PageSize   int = 10,      -- 頁尺寸
  @PageIndex  int = 1,      -- 頁碼
  @OrderType  bit = 0,      -- 設(shè)置排序類型, 非 0 值則降序
  @strWhere   varchar(2000) = "" -- 查詢條件 (注意: 不要加 where)
AS

declare @strSQL  varchar(6000)    -- 主語句
declare @strTmp  varchar(1000)    -- 臨時(shí)變量
declare @strOrder varchar(500)    -- 排序類型

if @OrderType != 0
begin
  set @strTmp = "<(select min"
  set @strOrder = " order by [" + @fldName + "] desc"
end
else
begin
  set @strTmp = ">(select max"
  set @strOrder = " order by [" + @fldName +"] asc"
end

set @strSQL = "select top " + str(@PageSize) + " * from ["
  + @tblName + "] where [" + @fldName + "]" + @strTmp + "(["
  + @fldName + "]) from (select top " + str((@PageIndex-1)*@PageSize) + " ["
  + @fldName + "] from [" + @tblName + "]" + @strOrder + ") as tblTmp)"
  + @strOrder

if @strWhere != ""
  set @strSQL = "select top " + str(@PageSize) + " * from ["
    + @tblName + "] where [" + @fldName + "]" + @strTmp + "(["
    + @fldName + "]) from (select top " + str((@PageIndex-1)*@PageSize) + " ["
    + @fldName + "] from [" + @tblName + "] where " + @strWhere + " "
    + @strOrder + ") as tblTmp) and " + @strWhere + " " + @strOrder

if @PageIndex = 1
begin
  set @strTmp = ""
  if @strWhere != ""
    set @strTmp = " where (" + @strWhere + ")"

  set @strSQL = "select top " + str(@PageSize) + " * from ["
    + @tblName + "]" + @strTmp + " " + @strOrder
end

exec (@strSQL)

GO

關(guān)鍵詞:存儲過程

贊助商鏈接:

主站蜘蛛池模板: 丽水市| 永春县| 什邡市| 鄂尔多斯市| 景宁| 磐石市| 类乌齐县| 华蓥市| 朝阳区| 绩溪县| 鹿邑县| 荆门市| 丰城市| 苏州市| 卓资县| 西吉县| 高台县| 宾阳县| 平阴县| 保亭| 嘉禾县| 临漳县| 论坛| 和龙市| 沿河| 阿勒泰市| 香河县| 永康市| 乌拉特前旗| 运城市| 芦山县| 汕尾市| 措勤县| 舞阳县| 当涂县| 景宁| 恩施市| 黄山市| 清镇市| 南和县| 巢湖市|