国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

實現千萬級數據的分頁顯示--整理資料并測試(轉)

2024-07-21 02:06:41
字體:
來源:轉載
供稿:網友
菜鳥學堂:
create procedure getrecordfrompage
    @tblname      varchar(255),       -- 表名
    @fldname      varchar(255),       -- 字段名
    @pagesize     int = 10,           -- 頁尺寸
    @pageindex    int = 1,            -- 頁碼
    @iscount      bit = 0,            -- 返回記錄總數, 非 0 值則返回
    @ordertype    bit = 0,            -- 設置排序類型, 非 0 值則降序
    @strwhere     varchar(1000) = ''  -- 查詢條件 (注意: 不要加 where)
as

declare @strsql   varchar(6000)       -- 主語句
declare @strtmp   varchar(100)        -- 臨時變量
declare @strorder varchar(400)        -- 排序類型

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

if @iscount != 0
    set @strsql = "select count(*) as total from [" + @tblname + "]"

exec (@strsql)

go



修改后,便于使用的代碼:


修改一點點便于其他人使用 
create procedure getrecordfrompage 
@tblname varchar(255), -- 表名 
@fldname varchar(255), -- 字段名 
@orderfldname varchar(255), -- 排序字段名 
@statfldname varchar(255), -- 統計字段名 
@pagesize int = 10, -- 頁尺寸 
@pageindex int = 1, -- 頁碼 
@iscount bit = 0, -- 返回記錄總數, 非 0 值則返回 
@ordertype bit = 0, -- 設置排序類型, 非 0 值則降序 
@strwhere varchar(1000) = '' -- 查詢條件 (注意: 不要加 where) 
as 

declare @strsql varchar(6000) -- 主語句 
declare @strtmp varchar(100) -- 臨時變量 
declare @strorder varchar(400) -- 排序類型 

if @ordertype != 0 
begin 
set @strtmp = "<(select min" 
set @strorder = " order by [" + @orderfldname +"] desc" 
end 
else 
begin 
set @strtmp = ">(select max" 
set @strorder = " order by [" + @orderfldname +"] asc" 
end 

set @strsql = "select top " + str(@pagesize) + " " + @fldname + " from [" 
+ @tblname + "] where [" + @orderfldname + "]" + @strtmp + "([" 
+ @orderfldname + "]) from (select top " + str((@pageindex-1)*@pagesize) + " [" 
+ @orderfldname + "] from [" + @tblname + "]" + @strorder + ") as tbltmp)" 
+ @strorder 

if @strwhere != '' 
set @strsql = "select top " + str(@pagesize) + " " + @fldname + " from [" 
+ @tblname + "] where [" + @orderfldname + "]" + @strtmp + "([" 
+ @orderfldname + "]) from (select top " + str((@pageindex-1)*@pagesize) + " [" 
+ @orderfldname + "] 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) + " " + @fldname + " from [" 
+ @tblname + "]" + @strtmp + " " + @strorder 
end 

if @iscount != 0 
set @strsql = "select count(" + @statfldname + ") as total from [" + @tblname + "]" 

exec (@strsql) 

go 


說明:
增加了下面兩個部分,其他人拷貝去可根據自己需要進行設定。
@orderfldname varchar(255), -- 排序字段名
@statfldname varchar(255), -- 統計字段名

fldname作用由排序轉變為控制需要打開的字段。
@fldname varchar(255), -- 字段名

----------------------------------------------
個人測試結果:
通過測試,性能并沒有原帖子所說的好。但這可能是機器原因,要知道,在sql server中,2千萬條空記錄大約要占用3g左右的空間,而插入這2千萬條記錄,在我的測試平臺上耗費了近10個小時,內存占用從125m增長到350m左右。我實際測試了一下,在建立索引的情況下,執行一次根據主鍵,返回一條記錄的查詢,在512m內存,2.2g cpu,20g單分區存儲數據庫文件,100m局域網的配置情況下,平均大約需要15s左右(這只是我的個人測試,不具有任何實質性意義。)。

另外我發現,對于上述配置的機器,運行sql server時,在百萬級別以下的表中執行查詢--(索引良好,沒有壞點,或者最新索引),速度差別不大,但達到8位數以上,也就是千萬以上時候,sql server表現就不太好了,當然,這與機器配置有很大關系了。但無可否認,sql server  2000還不是企業級數據庫的最佳選擇,在oracle執行類似的查詢,性能要好于sql server。插入執行完畢的時間是4個小時,內存占用一直沒有變化:400m。執行相同查詢,需要的時間是10s左右。

小弟最近忙于一個公積金項目,對于部門數據庫、中央數據庫的調度進行了一些評估,oracle軟件+sun/hp的硬件仍然占了中國政府機構服務器的大部分市場,再就是ibm,占據了高端和甚高端的大部分業務。

微軟在這方面打個勝仗,還有很長的路要走--個人認為,和硬件公司合作研發相配套硬件是不二法門。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 郑州市| 合水县| 芦山县| 丹江口市| 昭通市| 卓尼县| 舟曲县| 丹巴县| 嘉义县| 新河县| 台北县| 阳山县| 永德县| 腾冲县| 陇南市| 虞城县| 岳阳市| 浪卡子县| 满城县| 西充县| 长治市| 偏关县| 华容县| 饶平县| 宁晋县| 恩施市| 建德市| 深圳市| 民乐县| 宁陕县| 澜沧| 苍梧县| 高邮市| 米易县| 晋宁县| 犍为县| 罗山县| 青冈县| 阳东县| 台南县| 健康|