当前位置:首页 >> 建筑/土木 >>

千万数量级分页存储过程,可支持多表查询,任意排序


千万数量级分页存储过程,可支持多表查询,任意排序.txt31 岩石下的小草教我们坚强, 峭壁 上的野百合教我们执著,山顶上的松树教我们拼搏风雨,严寒中的腊梅教我们笑迎冰雪。从 程序中考虑:比如用数据缓冲和连接池技术 从数据库服务器端考虑:比如 csdn 只选出前 300 行纪录,因为用户不需要那么多纪录。你也 不必把 1000 万条全部分页。你也不必把纪录放在一个表中,一年(太多

就一个月)的数据放 一张表或定期把历史数据导出到数据数据仓库中, 不要用一张表装 1000 万条记录。 做好索引。 优化查询!尽量少用模糊查询,避免表扫描。不能让客户端连续多次搜索(csdn 就是)

千万级的数据库,有分页的意义吗?对于用户来说就是信息的海洋了,去看看 Google 怎么做的 吧, 根本就不存在如何分页的问题,如果一个结果有千万条,那跟没有结果一样是没有一样.应该 是统计条数,取出,前 N 条进行分页,如果到地还在准备分页的话,再次取结果 n,进行分页.并 且在其间推荐用户进行递进式搜索,来降低信息量,才式正确的

我有一个方法: (对于喜欢用 select * 的同行可能有用) 先检索出来,符合条件的所有 id (唯一标识)放在内存里 然后根据当前页数和每页多少行纪录 去内存中取 id 号的当前集 根据当前集 中的某一条 去数据库中检索相应的数据行 这里建议使用编译预处理 PrepareStatement 将结果放进数据类 (如果你的数据只有两列当然可以省略这一步) 然后把数据类添加进 ArrayList 或者 HashMap 然后 把载页面上输出 ArrayList 或者 HashMap 的数据 这样做,是因为只检索一列数据 要比检索多类要快得多 占用更少的内存。 一次只精确定位一条纪录 要比一次取出多条要快,这里的瓶颈在于频繁的与数据库交 互,但是我们使用编译预处理可以很大程度上提高性能。

千万数量级分页存储过程(可支持多表查询,任意排序) 功能不错的分页存储过程,可支持多表查询,任意排序

CreatePROCEDUREusp_PagingLarge @TableNamesVARCHAR(200),--表名,可以是多个表,但不能用别名 @PrimaryKeyVARCHAR(100),--主键,可以为空,但@Order 为空时该值不能为空 @FieldsVARCHAR(200),--要取出的字段, 可以是多个表的字段, 可以为空, 为空表示 select* @PageSizeINT,--每页记录数 @CurrentPageINT,--当前页,0 表示第 1 页 @FilterVARCHAR(200)='',--条件,可以为空,不用填 where @GroupVARCHAR(200)='',--分组依据,可以为空,不用填 groupby @OrderVARCHAR(200)=''--排序,可以为空,为空默认按主键升序排列,不用填 orderby

AS BEGIN DECLARE@SortColumnVARCHAR(200) DECLARE@OperatorCHAR(2) DECLARE@SortTableVARCHAR(200) DECLARE@SortNameVARCHAR(200) IF@Fields='' SET@Fields='*' IF@Filter='' SET@Filter='Where1=1' ELSE SET@Filter='Where'+@Filter IF@Group<>'' SET@Group='GROUPBY'+@Group

IF@Order<>'' BEGIN DECLARE@pos1INT,@pos2INT SET@Order=REPLACE(REPLACE(@Order,'asc','ASC'),'desc','DESC') IFCHARINDEX('DESC',@Order)>0 IFCHARINDEX('ASC',@Order)>0 BEGIN IFCHARINDEX('DESC',@Order)<CHARINDEX('ASC',@Order) SET@Operator='<=' ELSE SET@Operator='>=' END ELSE SET@Operator='<=' ELSE SET@Operator='>=' SET@SortColumn=REPLACE(REPLACE(REPLACE(@Order,'ASC',''),'DESC',''),'','') SET@pos1=CHARINDEX(',',@SortColumn) IF@pos1>0 SET@SortColumn=SUBSTRING(@SortColumn,1,@pos1-1) SET@pos2=CHARINDEX('.',@SortColumn) IF@pos2>0 BEGIN SET@SortTable=SUBSTRING(@SortColumn,1,@pos2-1) IF@pos1>0 SET@SortName=SUBSTRING(@SortColumn,@pos2+1,@pos1-@pos2-1) ELSE SET@SortName=SUBSTRING(@SortColumn,@pos2+1,LEN(@SortColumn)-@pos2) END

ELSE BEGIN SET@SortTable=@TableNames SET@SortName=@SortColumn END END ELSE BEGIN SET@SortColumn=@PrimaryKey SET@SortTable=@TableNames SET@SortName=@SortColumn SET@Order=@SortColumn SET@Operator='>=' END

DECLARE@typevarchar(50) DECLARE@precint Select@type=t.name,@prec=c.prec FROMsysobjectso JOINsyscolumnscono.id=c.id JOINsystypestonc.xusertype=t.xusertype Whereo.name=@SortTableANDc.name=@SortName IFCHARINDEX('char',@type)>0 SET@type=@type+'('+CAST(@precASvarchar)+')'

DECLARE@TopRowsINT SET@TopRows=@PageSize*@CurrentPage+1 print@TopRows print@Operator EXEC(' DECLARE@SortColumnBegin'+@type+' SETROWCOUNT'+@TopRows+' Select@SortColumnBegin='+@SortColumn+'FROM'+@TableNames+''+@Filter+''+@Group+'or DERBY'+@Order+' SETROWCOUNT'+@PageSize+' Select'+@Fields+'FROM'+@TableNames+''+@Filter+'AND'+@SortColumn+''+@Operator+'@S ortColumnBegin'+@Group+'orDERBY'+@Order+' ') END

GO --调用例子:

--1.单表/单排序

EXECusp_PagingLarge'bigtable','d_id','d_id,d_title,d_content,d_time',20,1,'','', 'd_iddesc' --2.单表/多排序 EXECusp_PagingLarge'bigtable','d_id','*',20,0,'','','d_timeasc,d_iddesc'

--3.多表/单排序 EXECusp_PagingLarge'bigtableleftjoinbigtable_authoronbigtable.d_id=bigtable_auth or.BigTable_id','bigtable.d_id','bigtable.d_id,bigtable.d_title,bigtable.d_conte nt,bigtable.d_time,bigtable_author.d_author',20,0,'','','bigtable.d_idasc'

--4.多表/多排序 EXECusp_PagingLarge'bigtableleftjoinbigtable_authoronbigtable.d_id=bigtable_auth or.BigTable_id','bigtable.d_id','bigtable.d_id,bigtable.d_title,bigtable.d_conte nt,bigtable.d_time,bigtable_author.d_author',20,0,'','','bigtable.d_timeasc,bigt able.d_iddesc'


相关文章:
简答题 -带答案
可以通过存储过程等在用户较少的情况下执行,从而错开...9. Oracle 是怎样分页的? Oracle 中使用 rownum ...条件查询、分组、排序、使 聚集函数,哪些到了...
分页查询存储过程
sqlserver+支持多表联合... 2页 免费 ORACLE分页查询排序存储... 3页 免费 SQL之通用查询分页存储过... 3页 1下载券 千万数量级分页存储过程... 3页 免费...
26-排序自定义分页数据
和默认翻页方式相比, 自定义分页能提高几个数量级的...加入了一个允许排序 的字段,还需要去修改存储过程。...和前面的用来从 Products 表获取所有行的查询有些不...
6实验六 存储过程
存储过程 二、实验内容 1、创建简单存储过程 (1)创建一个名为stu_pr的存储过程,该存储过程能查询出051班学生的所有资料,包括 学生的基本信息、学生的选课信息(...
SQL Server 2005 千万条以上记录分页数据库优化经验
数据千万条, 无法用管理工具修改结构, 只能用新建查询执行 SQL 命令才可以...3:接着重点优化,数据库分页存储过程,最后一页难以忍受的问题先解决一下。...
SqlSever2005一千万条以上记录分页数据库优化经验总结-...
10581490 条同事还需要从另外一个表读取 7 万多条...工具修改结构,只能新建查询执行 SQL 命令才可以。...3:接着重点优化,数据库分页存储过程,最后一页...
查询存储过程
查询存储过程_IT/计算机_专业资料。解密存储过程今日...千万数量级分页存储过程... 2页 免费 使用存储过程...
Oracle通用分页存储过程的创建与使用
在包体中实现具体的分页存储过程。 create or replace package body MF_PAK_001 is procedure GetDataByPage( p_tableName varchar2,--要查询的表名 p_fields...
不同情况下磁场的数量级
不同情况下磁场的数量级_电力/水利_工程科技_专业资料。今日推荐 78...基本数量级单位表 2页 免费 千万数量级分页存储过程... 3页 免费 数量级估算...
Oracle大数据量分页通用存储过程
Oracle大数据量分页通用存储过程_IT/计算机_专业资料...--查询语句,含排序部分 p_OutCursor out refCursor...
更多相关标签:
sql 千万级数据分页 | oracle千万级数据分页 | mysql千万级数据分页 | sql server千万级分页 | 千万数据分页 | mysql 千万级 分页 | 千万级数据分页查询 | oracle 分页排序 |