- 浏览: 154967 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
liveandevil:
我的一直出现驱动找不到的错误 你那个驱动jar文件时放在哪里 ...
JDBC数据库通用DAO -
zouc816:
hi,wjm901215
我看你这篇文章对mapXtreme ...
用mapXtreme Java开发web gis应用 (下)
从程序中考虑:比如用数据缓冲和连接池技术
从数据库服务器端考虑:比如csdn只选出前300行纪录,因为用户不需要那么多纪录。你也不必把1000万条全部分页。你也不必把纪录放在一个表中,一年(太多就一个月)的数据放一张表或定期把历史数据导出到数据数据仓库中,不要用一张表装1000万条记录。做好索引。优化查询!尽量少用模糊查询,避免表扫描。不能让客户端连续多次搜索(csdn就是)
千万级的数据库,有分页的意义吗?对于用户来说就是信息的海洋了,去看看Google怎么做的吧,
根本就不存在如何分页的问题,如果一个结果有千万条,那跟没有结果一样是没有一样.应该是统计条数,取出,前N条进行分页,如果到地还在准备分页的话,再次取结果n,进行分页.并且在其间推荐用户进行递进式搜索,来降低信息量,才式正确的
我有一个方法:(对于喜欢用select * 的同行可能有用)
先检索出来,符合条件的所有 id (唯一标识)放在内存里
然后根据当前页数和每页多少行纪录 去内存中取 id号的当前集
根据当前集 中的某一条 去数据库中检索相应的数据行
这里建议使用编译预处理PrepareStatement
将结果放进数据类 (如果你的数据只有两列当然可以省略这一步)
然后把数据类添加进 ArrayList 或者HashMap
然后 把载页面上输出 ArrayList 或者HashMap 的数据
这样做,是因为只检索一列数据 要比检索多类要快得多 占用更少的内存。
一次只精确定位一条纪录 要比一次取出多条要快,这里的瓶颈在于频繁的与数据库交互,但是我们使用编译预处理可以很大程度上提高性能。
千万数量级分页存储过程(可支持多表查询,任意排序)
功能不错的分页存储过程,可支持多表查询,任意排序
Create PROCEDUREusp_PagingLarge
@TableNames VAR CHAR(200),--表名,可以是多个表,但不能用别名
@PrimaryKey VAR CHAR(100),--主键,可以为空,但 @Order为空时该值不能为空
@Fields VAR CHAR(200),--要取出的字段,可以是多个表的字段,可以为空,为空表示select*
@PageSize INT,--每页记录数
@CurrentPage INT,--当前页,0表示第1页
@Filter VAR CHAR(200)='',--条件,可以为空,不用填Where
@Group VAR CHAR(200)='',--分组依据,可以为空,不用填groupby
@Order VAR CHAR(200)=''--排序,可以为空,为空默认按主键升序排列,不用填orderby
AS
BEGIN
DECLARE @SortColumn VAR CHAR(200)
DECLARE @Operator CHAR(2)
DECLARE @SortTable VAR CHAR(200)
DECLARE @SortName VAR CHAR(200)
IF @Fields=''
SET @Fields='*'
IF @Filter=''
SET @Filter='Where 1=1'
ELSE
SET @Filter='Where '+ @Filter
IF @Group<>''
SET @Group='GROUPBY'+ @Group
IF @Order<>''
BEGIN
DECLARE @pos1 INT, @pos2 INT
SET @Order=REPLACE(REPLACE( @Order,'asc','ASC'),'desc','DESC')
IF CHARINDEX('DESC', @Order)>0
IF CHARINDEX('ASC', @Order)>0
BEGIN
IF CHARINDEX('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 @type VAR CHAR(50)
DECLARE @prec INT
Select @type=t.name, @prec=c.prec
FROM sysobjectso
JOIN syscolumnsc on o.id=c.id
JOIN systypest on c.xusertype=t.xusertype
Where o.name= @SortTableANDc.name= @SortName
IF CHARINDEX('char', @type)>0
SET @type= @type+'('+CAST( @precAS VARCHAR)+')'
DECLARE @TopRows INT
SET @TopRows= @PageSize* @CurrentPage+1
prINT @TopRows
prINT @Operator
EXEC('
DECLARE @SortColumnBegin'+ @type+'
SETROWCOUNT'+ @TopRows+'
Select @SortColumnBegin='+ @SortColumn+' FROM '+ @TableNames+''+ @Filter+''+ @Group+'orDERBY'+ @Order+'
SETROWCOUNT'+ @PageSize+'
Select'+ @Fields+' FROM '+ @TableNames+''+ @Filter+'AND'+ @SortColumn+''+ @Operator+' @SortColumnBegin'+ @Group+'orDERBY'+ @Order+'
')
END
GO
--调用例子:
--1.单表/单排序
EXECusp_PagingLarge'bigtable','d_id','d_id,d_title,d_c on tent,d_time',20,1,'','','d_iddesc'
--2.单表/多排序
EXECusp_PagingLarge'bigtable','d_id','*',20,0,'','','d_timeasc,d_iddesc'
--3.多表/单排序
EXEC usp_PagingLarge'bigtableleftJOIN bigtable_author on bigtable.d_id=bigtable_author.BigTable_id','bigtable.d_id','bigtable.d_id,bigtable.d_title,bigtable.d_c on tent,bigtable.d_time,bigtable_author.d_author',20,0,'','','bigtable.d_idasc'
--4.多表/多排序
EXEC usp_PagingLarge'bigtableleftJOIN bigtable_author on bigtable.d_id=bigtable_author.BigTable_id','bigtable.d_id','bigtable.d_id,bigtable.d_title,bigtable.d_c on tent,bigtable.d_time,bigtable_author.d_author',20,0,'','','bigtable.d_timeasc,bigtable.d_iddesc'
发表评论
-
Oracle SQL Developer编辑日期的时分秒
2013-03-18 14:50 848Oracle SQL Developer里,默认日期型只能编辑 ... -
JAX-WS一个很简单的RPC风格的Web Service同步调用
2013-01-10 17:13 946Web Service技术,无疑会越来越被广泛应用的,可 ... -
JAX-WS集成Web工程的Web Service的创建和发布简单入门(1)
2013-01-10 17:10 1036首先, 为了我们这个WS的实验能够顺利的完成,最好能到官 ... -
sql语句优化
2013-01-06 16:28 1349sql语句优化 性能不理想的系统中除了一部分是因为应 ... -
C3P0连接池配置
2012-11-08 10:07 942<c3p0-config> <defau ... -
Http学习之使用HttpURLConnection发送post和get请求 .
2012-10-29 15:40 1086最常用的Http请求无非是get和post,get请求可以获取 ... -
WebServices实例
2012-09-06 16:58 624http://www.cnblogs.com/mingzi/a ... -
博客文章
2012-08-23 14:13 0http://caoweiblog.sinaapp.com/ -
80端口被占用
2012-08-09 10:53 749netstat -aon|findstr "80&q ... -
ANT build.xml文件详解
2012-07-26 16:29 878Ant的优点 跨平台性。Ant是用Java语言编写的 ... -
关于C3P0超过最大连接数问题
2012-07-02 10:27 1178package com.innotek; import ... -
设置Eclipse背景色
2012-06-21 15:33 829(Window)-->(Preferences)--&g ... -
JSTL之formatNumber取整 .
2012-03-16 23:16 1762在网上查了许多资料都说EL表达式无法取整,的确EL表达式除法结 ... -
Apache APMServ 80端口被占用的最全面的解决方法
2011-12-14 13:35 375311小时前 在使用WampServer成功架设起Apache ... -
Eclipse中添加MyEclipse插件
2011-12-14 11:31 764众所周知eclipse是一个很强大的java IDE,而且它免 ... -
java技术大全网址
2011-11-28 14:20 784http://www.open-open.com/ -
Eclipse的TPTP使用方法
2011-10-09 13:56 1625Eclipse的TPTP工具使用方法:1. ... -
TPTP教程
2011-10-09 11:04 1125Eclipse Test and Performance To ... -
JExcelAPI修改Excel的实例
2011-09-09 14:33 869package com.jExcelApi.test; ... -
Java Excel API 使用方法(2)
2011-09-09 09:48 746Workbook类提供的方法 1. int getNumbe ...
相关推荐
这是一个关于千万数量级分页存储过程_可支持多表查询_任意排序的存储过程处理源码
基于上述方法,可以进一步开发一个通用的分页存储过程,该过程支持任意SQL查询语句和排序规则。 ```sql CREATE PROCEDURE pagination2 ( @SQLn VARCHAR(4000), --不带排序语句的SQL语句 @Page int, --页码 @...
- **存储过程**和**函数**是预编译的SQL代码集合,可提高性能并简化复杂操作。 掌握这些基本概念和操作对于有效地管理和查询MySQL数据库至关重要。无论是进行数据分析、应用程序开发还是日常数据库维护,这些知识...
精选570个典型范例,全面覆盖实用和热点技术,涉及面广,实用性强源于实际项目开发,帮助读者短时间掌握更多实用技术,提高编程水平范例经过精心编排,重点、难点突出,易学易懂书后附录提供快速索引,即查、即学、...
精选570个典型范例,全面覆盖实用和热点技术,涉及面广,实用性强源于实际项目开发,帮助读者短时间掌握更多实用技术,提高编程水平范例经过精心编排,重点、难点突出,易学易懂书后附录提供快速索引,即查、即学、...
6、支持无限级栏目,可绑定二级域名,而且各栏目下的数据可以移动、合并 7、系统支持自定义模型,自定义字段,用户可根据需要基于文章、下载、图片模型创建新的频道,可轻松建站如房产,在线报名等系统功能,帮助...
57 2.2 Button控件应用 58 实例053 在Button按钮中显示图标 58 2.3 ComboBox控件应用 59 实例054 将数据表中的字段添加到ComboBox控件 59 实例055 带查询功能的ComboBox控件 61 2.4 ...
精选570个典型范例,全面覆盖实用和热点技术,涉及面广,实用性强源于实际项目开发,帮助读者短时间掌握更多实用技术,提高编程水平范例经过精心编排,重点、难点突出,易学易懂书后附录提供快速索引,即查、即学、...
精选570个典型范例,全面覆盖实用和热点技术,涉及面广,实用性强源于实际项目开发,帮助读者短时间掌握更多实用技术,提高编程水平范例经过精心编排,重点、难点突出,易学易懂书后附录提供快速索引,即查、即学、...