我的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上面做了 联合索引 呵呵
我的sql数据库存储过程分页- -的更多相关文章
- Sql Service存储过程分页
一起是用oracle数据库..感觉oracle数据库强大.查询速度是杠杠的.换了家公司用的是SQL SERVICE.以前用了1年现在捡回以前的记忆.动手写了动态SQL过存储过程分页.感觉和oracle ...
- SQL Server 存储过程 分页查询
Transact-SQL中的存储过程,非常类似于Java语言中的方法,它可以重复调用.当存储过程执行一次后,可以将语句缓存中,这样下次执行的时候直接使用缓存中的语句.这样就可以提高存储过程的性能. Ø ...
- sql 高性能存储过程分页
USE [Lyjjr] GO /****** Object: StoredProcedure [dbo].[P_ViewPage] Script Date: 05/29/2015 17:18:56 * ...
- SQL Server 存储过程分页
每每面试,总会有公司问到分页.在下不才,在这里写几种分页,望路过的各位大神尽情拍砖. 先从创建数据库说起.源码如下 一.创建数据库 /********************************* ...
- SQL 数据库 存储过程 视图
一.存储过程 1.概述 存储过程是一组编译在单个执行计划中的T-SQL语句 存储过程:就像函数一样的会保存在数据库中(可编程性) 存储过程的优点: 1.允许模块化程序设计 2.允许更快执行如果某操作需 ...
- SQL数据库存储过程
添加修改 create PROCEDURE sp_insert_1(pid int,pname varchar(200),page varchar(200),pscore int,out code i ...
- oracle数据库存储过程分页
CREATE OR REPLACE PROCEDURE prc_query (p_tableName in varchar2, --表名 p_columnNames in varchar2, --字段 ...
- sql server存储过程分页,行变列
CREATE PROCEDURE [dbo].[PROC_GetPriviousAndNextDetailContent]@Index varchar(20),--表主键@Table varchar( ...
- sql server存储过程分页
Create PROCEDURE [dbo].[Table_GetList] ) = '', -- 查询条件(注意: 不要加 WHERE) ) = '', -- 设置排序 , -- 页尺寸 , -- ...
随机推荐
- UNIX网络编程——非阻塞connect:时间获取客户程序
#include "unp.h" int connect_nonb(int sockfd, const SA *saptr, socklen_t salen, int nsec) ...
- java实现异步调用实例
在JAVA平台,实现异步调用的角色有如下三个角色: 调用者 取货凭证 真实数据 一个调用者在调用耗时操作,不能立即返回数据时,先返回一个取货凭证.然后在过一断时间后凭取货凭证来获取真正的数据. ...
- Java 学习之反射机制“解刨”分解类,并获取内容!
正常情况下,单纯的做开发是接触不到反射机制的(额,当然并不排除例外的情况了).下面我就对我学到的反射方面的知识做一个小小的总结,旨在复习和以后的查看. 原理分析: 所谓反射就是将一个类当做我们研究的对 ...
- UNIX环境高级编程——select、poll和epoll
一.select select目前几乎在所有的平台上支持,其良好跨平台支持也是它的一个优点,事实上从现在看来,这也是它所剩不多的优点之一. select的一个缺点在于单个进程能够监视的文件描述符的数量 ...
- Socket层实现系列 — connect()的实现
主要内容:connect()的Socket层实现.期间进程的睡眠和唤醒. 内核版本:3.15.2 我的博客:http://blog.csdn.net/zhangskd 应用层 int connect( ...
- Gitflow工作流程
在工作场合实施Git的时候,有很多种工作流程可供选择,此时反而会让你手足无措.本文罗列了企业团队最常用的一些Git工作流程,包括Centralized Workflow.Feature Branch ...
- MinerMonitorThread.java 监控线程
MinerMonitorThread.java 监控线程 package com.iteye.injavawetrust.miner; import org.apache.commons.loggin ...
- MinerHtmlThread.java 爬取页面线程
MinerHtmlThread.java 爬取页面线程 package com.iteye.injavawetrust.miner; import org.apache.commons.logging ...
- 网站开发进阶(二十九)HTML特殊转义字符
HTML特殊转义字符 参考文献 http://tool.oschina.net/commons?type=2 美文美图
- OC语言(六)
四十六.block类型 用来封装代码,可以在任何时候执行. 与函数的区别:可以在运行时动态产生. block的标志:^ 有形参.有返回值 int (^sumblock)(int,int) = ^(in ...