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

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


千万数量级分页存储过程,可支持多表查询,任意排序.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'


相关文章:
存储过程海量分页
千万数量级分页存储过程,可... 3页 免费 书香校园...字的排序并不是真正的正文的排序方法, 比如您查“...而对于多表和大表中定义的游标(大的数据集合)循环...
查询存储过程
查询存储过程_IT/计算机_专业资料。解密存储过程今日推荐 180份文档 CET...千万数量级分页存储过程... 3页 免费 千万数量级分页存储过程... 2页 免费 ...
MyCat不支持的Sql语句
因而不允许调用存储过程,但可通过注解来调用各个分片...(MyCat 先将结果取出,然后排序) Group by 务必使用...则会在所有分片上执行(子查询内外层的表一样较为...
MyBatis存储过程、MyBatis分页、MyBatis一对多增删改查...
MyBatis存储过程、MyBatis分页、MyBatis一对多增删改查操作_计算机软件及应用_IT/...sql增删改查存储过程 19页 1下载券 sqlserver+支持多表联合... 2页 免费 ...
动态多条件查询分页以及排序(一)--MVC与Entity Framewo...
动态多条件查询分页以及排序(一)--MVC与Entity Framework...2.对多表查询以及 or 的支持 不是很好。 而我们...但如何使用存储过程,存 储过程可以返回表 可以返回...
分页存储过程
分页存储过程_计算机软件及应用_IT/计算机_专业资料。存错过程代码: 1 -- === 2 -- Author: netboy 3 -- Create date: 20 存错过程代码: 1 -- === ...
实现DataGridView 的分页及全选取消全选的功能
千万数量级分页存储过程 -- Modify Date: 2010-10-26 -- === SET ANSI_NULLS...表名或视图名 表名或视图名 :主关键字 主关键字 :排序语句,不带Order By...
C#与SQL高效便捷分页存储过程
(50)的数据表中分页查询 每页显示50条数据最慢使用...Declare @AllowPagingSql ---判断是否排序 if CHARINDEX...千万数量级分页存储过程... 3页 免费 SQL server...
T-SQL 经典行专列、列转行,分页及存储过程
( --自增标识 --编号 --类型 --数量 [ID] ...排序,否则不能分页,虽然目前基本上查询表都要排序。...该存储过程是扩展的,还可以改为万能分页存储过程,只...
Oracle通用分页存储过程的创建与使用
在包体中实现具体的分页存储过程。 create or replace package body MF_PAK_001 is procedure GetDataByPage( p_tableName varchar2,--要查询的表名 p_fields...
更多相关标签: