zoukankan      html  css  js  c++  java
  • 三种SQL分页法效率分析

     1.分页方案一:(利用Not In和SELECT TOP分页)
     
    SELECT TOP 页大小 * FROM 表名 WHERE(id NOT IN
     (SELECT TOP 页大小*页数id FROM 表名 ORDERBY id))
    ORDERBY id
     
    例:
    SELECT TOP10 * FROM TestTable WHERE (ID NOT IN
      (SELECT TOP20 id FROM TestTable ORDER BY id))
    ORDERBY ID
     
    分页方案一:(利用Not In和SELECT TOP分页) 效率第二,需要拼接SQL语句
     
    2.分页方案二:(利用ID大于多少和SELECT TOP分页)
    SELECT TOP 页大小 * FROM TestTable WHERE(ID>
      (SELECT MAX(id) FROM (SELECT TOP 页大小*页数 id FROM 表名 ORDER BY id) AST))
    ORDERBY ID
     
    例:
    SELECT TOP10 * FROM TestTable WHERE ( ID>
      (SELECT MAX(id) FROM ( SELECT TOP20 id FROM TestTable ORDER BY id) AST))
    ORDERBY ID
     
    分页方案二:(利用ID大于多少和SELECT TOP分页)效率最高,需要拼接SQL语句
     
    3.分页方案三:(利用SQL的游标存储过程分页)
    CREATE proc page
    @pagenum int
    as
    SET NOCOUNT ON
    declare @sql nvarchar(500) --声明动态sql执行语句
    declare @pagecount int --当前页数

    --取得当前数据库的记录总数
    declare @row_num int
    begin
    select @row_num=count(*) from cat_list

    --创建临时表,作为数据过滤
    create table #change (T_id int)

    --判断当前页数
    if @row_num>6 --大于页面显示记录数,则分页
    begin
    set @row_num=@pagenum*6

    if @row_num=6
    select top 6 * from cat_list
    else
    begin
    set @row_num=(@pagenum-1)*6
    set @pagecount=@row_num
    set @sql=N'insert #change (T_id) select top '+cast(@pagecount as char(100))+' T_id from cat_list where T_id not in (select T_id from #change)'
    exec sp_executesql @sql
    select top 6 * from cat_list where T_id not in (select T_id from #change)
    end
    end
    else --只现实全部的数据
    select * from cat_list
    end
    GO


    客户端这样调用:
    <!--#include file="conn.asp"-->
    <!--#include file="adovbs.inc"-->
    <% dim T_com
    dim T_rs'declare datamanage recordset


    dim parameters
    set T_com=server.createobject("adodb.command")
    T_com.ActiveConnection=conn
    T_com.CommandText="page"
    T_com.CommandType=adCmdStoredProc
    'T_com.Prepared=true
    set parameters=T_com.CreateParameter("@pagenum",adInteger,adParamInput)
    T_com.Parameters.Append parameters
    dim page
    page=request.QueryString("page")
    if page="" then
    page=1
    end if
    T_com("@pagenum")=page
    set T_rs=T_com.Execute

    do while not T_rs.eof
    response.Write T_rs("c_name")
    T_rs.movenext
    loop
    %>
    <a href="a.asp?page=<%=page+1%>">ddddd</a> 
     
    分页方案三:(利用SQL的游标存储过程分页) 效率最差,但是最为通用
  • 相关阅读:
    noip2010 乌龟棋
    noip2010 机器翻译
    noip2009 靶形数独
    noip2009 最优贸易
    noip2009 Hankson的趣味题
    noip2009 潜伏者
    noi2010 能量采集
    八大排序算法(六) 快速排序
    八大排序算法(六) 快速排序
    Lesson 12 Nehe
  • 原文地址:https://www.cnblogs.com/mooncher/p/2039972.html
Copyright © 2011-2022 走看看