zoukankan      html  css  js  c++  java
  • 我的sql数据库存储过程分页-

       
    以前用到数据库存储过程分页的时候都是用 not in


    但是最近工作的时候,随着数据库记录的不断增大,发现not in的效率 真的不行


    虽然都设置了索引,但是当记录达到10w的时候就发现不行了,都是需要好几秒钟,受不了了


    所以就想换个方法,直接找到需要的页面的数据库记录的第一个ID,当然这个id是有索引,唯一的


    而且是主键,这个也是网上说到的最快的一个方法 ^_^,据说比游标更快(我没用过游标)


    CREATE PROCEDURE sp_Image_List_ByCategoryID3
    (
     @rowscount int =0 output,
     @categoryid int,
     @currentpage int =1,
     @pagesize int = 20 
    )
     AS
    DECLARE  @SQL nvarchar(2000)
    SET @SQL  =  ''
    SELECT @rowscount=count(ImageID) FROM  T_Images WHERE CategoryID=@categoryid


    IF  @currentpage = 1
     SET  @SQL = @SQL + 'SELECT Top ' + cast(@PageSize as nvarchar(20)) + ' ImageID,ThumbName,ImageCode,BigCategoryid  FROM T_Images WHERE CateGoryID=' + CAST(@categoryid AS VARCHAR(10))+' ORDER BY Imageid DESC '
    ELSE 
    BEGIN
     DECLARE  @Num int
     SET  @Num = @PageSize * (@currentpage - 1)
     SET  @SQL = @SQL + 'DECLARE  @LastID NVARCHAR(100)' + char(13)
     SET  @SQL = @SQL + 'SELECT Top ' + cast(@Num as nvarchar(20)) + ' @LastID= ImageID FROM T_Images WHERE CateGoryID=' + CAST(@categoryid AS VARCHAR(10))+'  ORDER BY Imageid DESC ' + char(13)
     SET  @SQL = @SQL + 'SELECT Top ' + cast(@PageSize as nvarchar(20)) + '  ImageID,ThumbName,ImageCode,BigCategoryid  FROM T_Images WHERE CateGoryID=' + CAST(@categoryid AS VARCHAR(10))+'   AND ImageID < @LastID  ORDER BY Imageid DESC '
    END


    EXECUTE sp_executesql @SQL
    GO


    换了这个存储过程过程后,发现真的快了很多,现在的数据是40w,就是检索最后一页,都只需要100多ms,爽多了,^_^,我的ImageID上面做了 联合索引 呵呵
  • 相关阅读:
    记一次5000并发的调试过程
    Thread Local Area内存溢出的处理方法
    关于不停机部署方案的选择
    Spring Cloud版本选择
    python学习记录-机器学习
    SAM宏观生态学空间分析帮助文档
    arcgis raster clip and mask difference 栅格 提取 clip 和 mask 方法的区别
    R语言 重命名目录下所有文件
    R语言并行运算示例 parallel 包
    R语言查看栅格值
  • 原文地址:https://www.cnblogs.com/baiduligang/p/4247275.html
Copyright © 2011-2022 走看看