『壹』 Oracle的极大数据量的分页查询问题

1.把星都换成需要的字段名试一下。
2.索引顺序排列正确(这个你查一下,索引不是建 了就可以。查询时有顺序的,四年前的项目,改变顺序后,时间由35s 提升到6-8s,具体的记不清了,只记得有这么回事。)

回去以后试一下你的SQL,只有数据多才出现这个问题吗?字段长度大约都多少?

『贰』 如何处理大数据表分页

不同编程语言有不同的方法,建议你直接在网络搜索更具体的问题。

『叁』 一千万条数据的表, 如何分页查询

数据量过大的情况下, limit offset分页会由于扫描数据太多而越往后查询越慢。可版以配合当前页最后一条ID进行权查询, SELECT * FROM TABLE WHERE id > #{ID} LIMIT #{LIMIT}。当然, 这种情况下ID必须是有序的, 这也是有序ID的好处之一。

『肆』 在ORACLE大数据量下的分页解决方法

一般用截取ID方法,还有是三层嵌套方法。
答:一种分页方法
<%
int i=1;
int numPages=14;
String pages = request.getParameter("page") ;
int currentPage = 1;
currentPage=(pages==null)?(1):{Integer.parseInt(pages)}
sql = "select count(*) from tables";
ResultSet rs = DBLink.executeQuery(sql) ;
while(rs.next()) i = rs.getInt(1) ;
int intPageCount=1;
intPageCount=(i%numPages==0)?(i/numPages):(i/numPages+1);
int nextPage ;
int upPage;
nextPage = currentPage+1;
if (nextPage>=intPageCount) nextPage=intPageCount;
upPage = currentPage-1;
if (upPage<=1) upPage=1;
rs.close();
sql="select * from tables";
rs=DBLink.executeQuery(sql);
i=0;
while((i<numPages*(currentPage-1))&&rs.next()){i++;}
%>
//输出内容
//输出翻页连接
合计:<%=currentPage%>/<%=intPageCount%><a href="List.jsp?page=1">第一页</a><a

href="List.jsp?page=<%=upPage%>">上一页</a>
<%
for(int j=1;j<=intPageCount;j++){
if(currentPage!=j){
%>
<a href="list.jsp?page=<%=j%>">[<%=j%>]</a>
<%
}else{
out.println(j);
}
}
%>
<a href="List.jsp?page=<%=nextPage%>">下一页</a><a href="List.jsp?page=<%=intPageCount%>">最后页

</a>

『伍』 sql 存储过程分页代码 支持亿万庞大数据量

复制代码
代码如下:
CREATE
PROCEDURE
page
@
varchar(255),
--
表名
@strGetFields
varchar(1000)
=
'*',
--
需要返回的列
@fldName
varchar(255)='id',
--
排序的字段名
@PageSize
int
=
10,
--
页尺寸
@PageIndex
int
=
1,
--
页码
@doCount
bit
=
0,
--
返回记录总数,

0
值则返回
@OrderType
bit
=
0,
--
设置排序类型,

0
值则降序
0:asc
1:desc
@strWhere
varchar(1500)
=
'',
--
查询条件
(注意:
不要加
where)
@ID
nvarchar(50)='id'
--主表的列。。最好是主键
AS
declare
@strSQL
varchar(5000)
--
主语句
declare
@strTmp
varchar(110)
--
临时变量
declare
@strOrder
varchar(400)
--
排序类
if
@doCount
!=
0
begin
if
@strWhere
!=''
set
@strSQL
=
'select
count(*)
as
Total
from
'
+
@tblName+
'
where
'+@strWhere
else
set
@strSQL
=
'select
count(*)
as
Total
from
'
+
@tblName
+
''
end
--以上代码的意思是如果@doCount传递过来的不是0,就执行总数统计。以下的所有代码都是@doCount为0的情况
else
begin
if
@OrderType
!=
0
begin
set
@strTmp
=
'<(select
min'
set
@strOrder
=
'
order
by
'
+
@fldName
+'
desc'
--如果@OrderType不是0,就执行降序,这句很重要!
end
else
begin
set
@strTmp
=
'>(select
max'
set
@strOrder
=
'
order
by
'
+
@fldName
+'
asc'
end
if
@PageIndex
=
1
begin
if
@strWhere
!=
''
set
@strSQL
=
'select
top
'
+
str(@PageSize)
+'
'+@strGetFields+
'
from
'
+
@tblName
+
'
where
'
+
@strWhere
+
'
'
+
@strOrder
else
set
@strSQL
=
'select
top
'
+
str(@PageSize)
+'
'+@strGetFields+
'
from
'+
@tblName
+
'
'+
@strOrder
--如果是第一页就执行以上代码,这样会加快执行速度
end
else
begin
--以下代码赋予了@strSQL以真正执行的SQL代码
set
@strSQL
=
'select
top
'
+
str(@PageSize)
+'
'+@strGetFields+
'
from
'
+
@tblName
+
'
where
'
+
@fldName
+
'
'
+
@strTmp
+
'(
'+
@ID
+
'
)
from
(select
top
'
+
str((@PageIndex-1)*@PageSize)
+
'
'+
@fldName
+
'
from
'
+
@tblName
+
@strOrder
+
')
as
tblTmp)'+
@strOrder
if
@strWhere
!=
''
set
@strSQL
=
'select
top
'
+
str(@PageSize)
+'
'+@strGetFields+
'
from
'
+
@tblName
+
'
where
'
+
@fldName
+
'
'
+
@strTmp
+
'('
+
@ID
+
')
from
(select
top
'
+
str((@PageIndex-1)*@PageSize)
+
'
'
+
@fldName
+
'
from
'
+
@tblName
+
'
where
'
+
@strWhere
+
'
'
+
@strOrder
+
')
as
tblTmp)
and
'
+
@strWhere
+
'
'
+
@strOrder
end
end
exec
(@strSQL)

『陆』 一个比较实用的大数据量分页存储过程

一个比较实用的大数据量分页存储过程

create proc sp_PublicTurnPageWebSite( @TBName nvarchar(100)=‘‘, --表名,如 pinyin
@PageSize int=10, --每页的记录数,默认为 10
@CurPage int=1, --表示当前页 1
@KeyField nvarchar(100)=‘ID‘, --关键字段名,默认为 ID,该字段要求是表中的索引 或 无重复和不为空的字段
@KeyAscDesc nvarchar(4)=‘ASC‘, --关键字的升、降序,默认为升序 ASC , 降序为 DESC
@Fields nvarchar(500)=‘*‘, --所选择的列名,默认为全选
@Condition nvarchar(200)=‘‘, --where 条件,默认为空
@Order nvarchar(200)=‘‘ --排序条件,默认为空
) with encryption as
BEGIN
if @TBName = ‘‘
begin
raiserror(‘请指定表名!‘,11,1)
return
end
if @PageSize <=0 or @CurPage <0
begin
raiserror(‘当前页数和每页的记录数都必须大于零!‘,11,1)
return
end
if @KeyAscDesc = ‘DESC‘
set @KeyAscDesc = ‘<‘
else
set @KeyAscDesc = ‘>‘
if @Condition <> ‘‘
set @Condition = ‘ where ‘ + @Condition
一个比较实用的大数据量分页存储过程
declare @SQL nvarchar(2000) set @SQL = ‘‘
if @CurPage = 1
set @SQL = @SQL + ‘SELECT Top ‘ + cast(@PageSize as nvarchar(20)) + ‘ ‘ + @Fields + ‘ FROM ‘ + @TBName + @Condition + ‘ ‘ + @Order
else
begin
declare @iTopNum int
set @iTopNum = @PageSize * (@CurPage - 1)
set @SQL = @SQL + ‘declare @sLastValue nvarchar(100)‘ + char(13)
set @SQL = @SQL + ‘SELECT Top ‘ + cast(@iTopNum as nvarchar(20)) + ‘ @sLastValue=‘ + @KeyField + ‘ FROM ‘ + @TBName + @Condition + ‘ ‘ + @Order + char(13)

declare @Condition2 nvarchar(200)
if @Condition = ‘‘
set @Condition2 = ‘ where ‘ + @KeyField + @KeyAscDesc + ‘@sLastValue ‘
else
set @Condition2 = ‘ and ‘ + @KeyField + @KeyAscDesc + ‘@sLastValue ‘
set @SQL = @SQL + ‘SELECT Top ‘ + cast(@PageSize as nvarchar(20)) + ‘ ‘ + @Fields + ‘ FROM ‘ + @TBName + @Condition + @Condition2 + @Order
end

『柒』 大数据量查询并分页显示问题

对于大量的数据 分页的时候,我们可以按需取数据。
行得到记录 总数 , Rscount,
然后 根据自己需要设定的每页显示的记录条数, 如 12条
再计算 可以分成多少页 Pagecount= Rscount/12

如果是第5页, 则取第6页的12条记录,页码是可以用变量的,如PageSize 每次给不同的页值。
select top 12 * from 表 where Id not in(select top 5*12 Id from 表 order by id desc) order by Id desc

以此类推和 扩展。

20万条记录的数据库 用access 太可怜了!

『捌』 mysql 数据量大的表如何做分页查询

直接用limit start, count分页语句, 也是我程序中用的方法:
select * from proct limit start, count
当起始页较小时,查询没有性能问题,我们分别看下从10, 100, 1000, 10000开始分页的执行时间(每页取20条), 如下:
select * from proct limit 10, 20 0.016秒
select * from proct limit 100, 20 0.016秒
select * from proct limit 1000, 20 0.047秒
select * from proct limit 10000, 20 0.094秒
我们已经看出随着起始记录的增加,时间也随着增大, 这说明分页语句limit跟起始页码是有很大关系的,那么我们把起始记录改为40w看下(也就是记录的一般左右) select * from proct limit 400000, 20 3.229秒
再看我们取最后一页记录的时间
select * from proct limit 866613, 20 37.44秒
难怪搜索引擎抓取我们页面的时候经常会报超时,像这种分页最大的页码页显然这种时
间是无法忍受的。
从中我们也能总结出两件事情:
1)limit语句的查询时间与起始记录的位置成正比
2)mysql的limit语句是很方便,但是对记录很多的表并不适合直接使用。

『玖』 mysql数据量大时 怎么分页 比较快

分页查询复一般 DBA 想到的制办法是在某个(如ID,create_time)字段上加组合索引。这样条件排序都能有效的利用到索引,性能迅速提升。
因为如果当 LIMIT 子句变成 “LIMIT 1000000,10” 时,你会抱怨:我只取10条记录为什么还是慢?
要知道数据库也并不知道第1000000条记录从什么地方开始,即使有索引也需要从头计算一次。出现这种性能问题,多数情形下是程序员偷懒了。在前端数据浏览翻页,或者大数据分批导出等场景下,是可以将上一页的最大值当成参数作为查询条件的。SQL 重新设计如下:
SELECT *
FROM 表
WHERE create_time > '2017-07-04 09:00:00'
ORDER BY create_time limit 10;

这样查询时间基本固定,不会随着数据量的增长而发生变化。

『拾』 数据库数据量非常庞大,需要多次查询才能得到需要数据。请问,每次我都需要操作上一次的虚表,这个怎么解

针对含有大容量数据的表可以建立索引,提高查询的效率!希望对你有帮助。