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

實(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)鍵詞:存儲過程

贊助商鏈接:

主站蜘蛛池模板: 库伦旗| 铜梁县| 噶尔县| 永昌县| 恩施市| 开鲁县| 光山县| 关岭| 沅陵县| 千阳县| 莫力| 杭锦旗| 苏尼特左旗| 苍溪县| 平昌县| 海林市| 黑山县| 新晃| 民乐县| 和田县| 周至县| 尤溪县| 延安市| 当阳市| 河北省| 中牟县| 怀来县| 桦川县| 柳州市| 开远市| 青河县| 开化县| 合江县| 澄迈县| 阳山县| 霍山县| 屏东市| 钟山县| 定兴县| 大荔县| 吉水县|