24小时热门版块排行榜    

Znn3bq.jpeg
查看: 284  |  回复: 1
当前主题已经存档。

lfl_jeetoon

铜虫 (初入文坛)

[交流] 海量数据库的查询优化及分页算法方案

大家知道SQL SERVER的存储过程是事先编译好的SQL语句,它的执行效率要比通过WEB页面传来的SQL语句的执行效率要高。下面的存储过程不仅含有分页方案,还会根据页面传来的参数来确定是否进行数据总数统计。
-- 获取指定页的数据
CREATE PROCEDURE pagination3
@tblName   varchar(255),       -- 表名
@strGetFields varchar(1000) = '*',  -- 需要返回的列
@fldName varchar(255)='',      -- 排序的字段名
@PageSize   int = 10,          -- 页尺寸
@PageIndex  int = 1,           -- 页码
@doCount  bit = 0,   -- 返回记录总数, 非 0 值则返回
@OrderType bit = 0,  -- 设置排序类型, 非 0 值则降序
@strWhere  varchar(1500) = ''  -- 查询条件 (注意: 不要加 where)
AS
declare @strSQL   varchar(5000)       -- 主语句
declare @strTmp   varchar(110)        -- 临时变量
declare @strOrder varchar(400)        -- 排序类型

if @doCount != 0
  begin
    if @strWhere !=''
    set @strSQL = "select count(*) as Total from [" + @tblName + "] where "+@strWhere
    else
    set @strSQL = "select count(*) as Total from [" + @tblName + "]"
end  
--以上代码的意思是如果@doCount传递过来的不是0,就执行总数统计。以下的所有代码都是@doCount为0的情况
else
begin

if @OrderType != 0
begin
    set @strTmp = "<(select min"
set @strOrder = " order by [" + @fldName +"] desc"
--如果@OrderType不是0,就执行降序,这句很重要!
end
else
begin
    set @strTmp = ">(select max"
    set @strOrder = " order by [" + @fldName +"] asc"
end

if @PageIndex = 1
begin
    if @strWhere != ''   
    set @strSQL = "select top " + str(@PageSize) +" "+@strGetFields+ "  from [" + @tblName + "] where " + @strWhere + " " + @strOrder
     else
     set @strSQL = "select top " + str(@PageSize) +" "+@strGetFields+ "  from ["+ @tblName + "] "+ @strOrder
--如果是第一页就执行以上代码,这样会加快执行速度
end
else
begin
--以下代码赋予了@strSQL以真正执行的SQL代码
set @strSQL = "select top " + str(@PageSize) +" "+@strGetFields+ "  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) +" "+@strGetFields+ "  from ["
        + @tblName + "] where [" + @fldName + "]" + @strTmp + "(["
        + @fldName + "]) from (select top " + str((@PageIndex-1)*@PageSize) + " ["
        + @fldName + "] from [" + @tblName + "] where " + @strWhere + " "
        + @strOrder + " as tblTmp) and " + @strWhere + " " + @strOrder
end
end   
exec (@strSQL)
GO
  上面的这个存储过程是一个通用的存储过程,其注释已写在其中了。

有个附件是关于本过程的详细说明。
回复此楼

» 猜你喜欢

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lfl_jeetoon

铜虫 (初入文坛)

自己顶一下。
2楼2007-12-05 14:39:56
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 lfl_jeetoon 的主题更新
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 085600材料与化工349分求调剂 +8 李木子啊哈哈 2026-04-12 9/450 2026-04-12 22:55 by 李木子啊哈哈
[考研] 调剂求收留 +29 果然有我 2026-04-10 30/1500 2026-04-12 22:14 by zxcwyt
[考研] 339求调剂 +3 hanwudada 2026-04-12 3/150 2026-04-12 21:43 by lbsjt
[考研] 288求调剂,一志愿华南理工大学071005 +18 ioodiiij 2026-04-08 18/900 2026-04-11 20:25 by liyun12321
[考研] 求调剂 +6 电气300求调剂不 2026-04-08 6/300 2026-04-11 20:14 by 逆水乘风
[考研] 求调剂 +11 翩翩一书生 2026-04-09 11/550 2026-04-11 19:57 by 逆水乘风
[考研] 调剂 化学 307 +21 73372112 2026-04-09 23/1150 2026-04-10 23:53 by wj165256
[基金申请] 有爆料,一个青年教师卖房得400万,然后换了一个四青帽子 +9 babu2015 2026-04-08 9/450 2026-04-10 11:43 by 苏东坡二世
[考博] 博士自荐 +7 可可小胖 2026-04-08 7/350 2026-04-10 08:28 by kimhero
[考研] 材料化工总分334求调剂 +16 Riot2025 2026-04-08 17/850 2026-04-09 20:19 by maddjdld
[考研] 337求调剂 +4 Gky09300550, 2026-04-09 4/200 2026-04-09 17:18 by 帕尔马拉特
[考研] 349学科化学045106求调剂,化学类都可以 +8 保好懂懂 2026-04-08 8/400 2026-04-09 14:03 by xulei3024
[考研] 材料307分求大佬组收留 +17 Hll胡 2026-04-07 17/850 2026-04-09 10:53 by liuhuiying09
[考研] 一志愿华东理工085601材料工程303分求调剂 +15 a1708 2026-04-06 15/750 2026-04-08 16:23 by luoyongfeng
[考研] 304求调剂 +10 素年祭语 2026-04-06 17/850 2026-04-08 09:05 by 蓝云思雨
[考研] 专硕085403,291分,有两篇专利,一国一奖 +3 哈吉咪哈吉咪 2026-04-07 3/150 2026-04-07 18:21 by 蓝云思雨
[考研] 085602调剂 初试总分335 +3 19123253302 2026-04-06 3/150 2026-04-07 18:00 by jp9609
[考研] 信工所11408 340分 本科西安交大自动化 +3 moontrek 2026-04-06 3/150 2026-04-07 09:56 by chongya
[考研] 333求调剂 +6 合乘杨习夕 2026-04-06 6/300 2026-04-07 09:44 by 猪会飞
[考研] 285求调剂 +5 mapmath 2026-04-06 6/300 2026-04-06 17:18 by 蓝云思雨
信息提示
请填处理意见