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

上传人:子 文档编号:43338448 上传时间:2018-06-05 格式:DOC 页数:6 大小:15.03KB
返回 下载 相关 举报
千万数量级分页存储过程,可支持多表查询,任意排序_第1页
第1页 / 共6页
千万数量级分页存储过程,可支持多表查询,任意排序_第2页
第2页 / 共6页
千万数量级分页存储过程,可支持多表查询,任意排序_第3页
第3页 / 共6页
千万数量级分页存储过程,可支持多表查询,任意排序_第4页
第4页 / 共6页
千万数量级分页存储过程,可支持多表查询,任意排序_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《千万数量级分页存储过程,可支持多表查询,任意排序》由会员分享,可在线阅读,更多相关《千万数量级分页存储过程,可支持多表查询,任意排序(6页珍藏版)》请在金锄头文库上搜索。

1、千万数量级分页存储过程千万数量级分页存储过程, ,可支持多表查询可支持多表查询, ,任意排序任意排序千万数量级分页存储过程,可支持多表查询,任意排序.txt 人和人的心最近又最远,真诚是中间的通道。试金可以用火,试女人可以用金,试男人可以用女人-往往都经不起那么一试。从程序中考虑:比如用数据缓冲和连接池技术 从数据库服务器端考虑:比如 csdn 只选出前 300 行纪录,因为用户不需要那么多纪录。你也不必把 1000 万条全部分页。你也不必把纪录放在一个表中,一年(太多就一个月)的数据放一张表或定期把历史数据导出到数据数据仓库中,不要用一张表装 1000 万条记录。做好索引。优化查询!尽量少用

2、模糊查询,避免表扫描。不能让客户端连续多次搜索(csdn 就是)千万级的数据库,有分页的意义吗?对于用户来说就是信息的海洋了,去看看 Google 怎么做的吧, 根本就不存在如何分页的问题,如果一个结果有千万条,那跟没有结果一样是没有一样.应该是统计条数,取出,前 N 条进行分页,如果到地还在准备分页的话,再次取结果 n,进行分页.并且在其间推荐用户进行递进式搜索,来降低信息量,才式正确的我有一个方法:(对于喜欢用 select * 的同行可能有用) 先检索出来,符合条件的所有 id (唯一标识)放在内存里 然后根据当前页数和每页多少行纪录 去内存中取 id 号的当前集 根据当前集 中的某一条

3、 去数据库中检索相应的数据行 这里建议使用编译预处理 PrepareStatement 将结果放进数据类 (如果你的数据只有两列当然可以省略这一步) 然后把数据类添加进 ArrayList 或者 HashMap 然后 把载页面上输出 ArrayList 或者 HashMap 的数据 这样做,是因为只检索一列数据 要比检索多类要快得多 占用更少的内存。 一次只精确定位一条纪录 要比一次取出多条要快,这里的瓶颈在于频繁的与数据库交互,但是我们使用编译预处理可以很大程度上提高性能。千万数量级分页存储过程(可支持多表查询,任意排序)功能不错的分页存储过程,可支持多表查询,任意排序CreatePROCE

4、DUREusp_PagingLargeTableNamesVARCHAR(200),-表名,可以是多个表,但不能用别名PrimaryKeyVARCHAR(100),-主键,可以为空,但Order 为空时该值不能为空FieldsVARCHAR(200),-要取出的字段,可以是多个表的字段,可以为空,为空表示 select*PageSizeINT,-每页记录数CurrentPageINT,-当前页,0 表示第 1 页FilterVARCHAR(200)=,-条件,可以为空,不用填 whereGroupVARCHAR(200)=,-分组依据,可以为空,不用填 groupbyOrderVARCHAR(

5、200)=-排序,可以为空,为空默认按主键升序排列,不用填 orderbyASBEGINDECLARESortColumnVARCHAR(200)DECLAREOperatorCHAR(2)DECLARESortTableVARCHAR(200)DECLARESortNameVARCHAR(200)IFFields=SETFields=*IFFilter=SETFilter=Where1=1ELSESETFilter=Where+FilterIFGroupBEGINDECLAREpos1INT,pos2INTSETOrder=REPLACE(REPLACE(Order,asc,ASC),des

6、c,DESC)IFCHARINDEX(DESC,Order)0IFCHARINDEX(ASC,Order)0BEGINIFCHARINDEX(DESC,Order)=ENDELSESETOperator=SETSortColumn=REPLACE(REPLACE(REPLACE(Order,ASC,),DESC,),)SETpos1=CHARINDEX(,SortColumn)IFpos10SETSortColumn=SUBSTRING(SortColumn,1,pos1-1)SETpos2=CHARINDEX(.,SortColumn)IFpos20BEGINSETSortTable=SUB

7、STRING(SortColumn,1,pos2-1)IFpos10SETSortName=SUBSTRING(SortColumn,pos2+1,pos1-pos2-1)ELSESETSortName=SUBSTRING(SortColumn,pos2+1,LEN(SortColumn)-pos2)ENDELSEBEGINSETSortTable=TableNamesSETSortName=SortColumnENDENDELSEBEGINSETSortColumn=PrimaryKeySETSortTable=TableNamesSETSortName=SortColumnSETOrder

8、=SortColumnSETOperator=ENDDECLAREtypevarchar(50)DECLAREprecintSelecttype=t.name,prec=c.precFROMsysobjectsoJOINsyscolumnscono.id=c.idJOINsystypestonc.xusertype=t.xusertypeWhereo.name=SortTableANDc.name=SortNameIFCHARINDEX(char,type)0SETtype=type+(+CAST(precASvarchar)+)DECLARETopRowsINTSETTopRows=Page

9、Size*CurrentPage+1printTopRowsprintOperatorEXEC(DECLARESortColumnBegin+type+SETROWCOUNT+TopRows+SelectSortColumnBegin=+SortColumn+FROM+TableNames+Filter+Group+orDERBY+Order+SETROWCOUNT+PageSize+Select+Fields+FROM+TableNames+Filter+AND+SortColumn+Operator+SortColumnBegin+Group+orDERBY+Order+)ENDGO-调用

10、例子:-1.单表/单排序EXECusp_PagingLargebigtable,d_id,d_id,d_title,d_content,d_time,20,1,d_iddesc-2.单表/多排序EXECusp_PagingLargebigtable,d_id,*,20,0,d_timeasc,d_iddesc-3.多表/单排序EXECusp_PagingLargebigtableleftjoinbigtable_authoronbigtable.d_id=bigtable_author.BigTable_id,bigtable.d_id,bigtable.d_id,bigtable.d_tit

11、le,bigtable.d_content,bigtable.d_time,bigtable_author.d_author,20,0,bigtable.d_idasc-4.多表/多排序EXECusp_PagingLargebigtableleftjoinbigtable_authoronbigtable.d_id=bigtable_author.BigTable_id,bigtable.d_id,bigtable.d_id,bigtable.d_title,bigtable.d_content,bigtable.d_time,bigtable_author.d_author,20,0,bigtable.d_timeasc,bigtable.d_iddesc

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号