大数据分页查询
Ⅰ sqlserver2000 如何提高分页查询大数据量的效率
sqlserver2005及以上的版本有row_number()函数可以高效分页,sqlserver2000的话只能看算法了
Ⅱ 大数据量查询并分页显示问题
对于大量的数据 分页的时候,我们可以按需取数据。
行得到记录 总数 , 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 太可怜了!
Ⅲ Oracle的极大数据量的分页查询问题
1.把星都换成需要的字段名试一下。
2.索引顺序排列正确(这个你查一下,索引不是建 了就可以。查询时有顺序的,四年前的项目,改变顺序后,时间由35s 提升到6-8s,具体的记不清了,只记得有这么回事。)
回去以后试一下你的SQL,只有数据多才出现这个问题吗?字段长度大约都多少?
Ⅳ 网上很多人说oracle 11g在处理大数据分页时用rowid比rownum效率快很多,求rowid和rownum分页效率原理
rownum和rowid是两种不同的东西,不知道你如何利用rowid来分页?
rownum是返回的记录编号。rowid可理解为返回记录的实际地址。
当根据rowid访问时相当于不经查询直接取数,用rownum必须经过查询(即数据库里有查询动作)。如果已经知道了rowid再去获取数据和通过rownum计数去获取数据,肯定用rowid快。
实际上,由于oracle不支持的真正的分页查询,所谓分页,是先把数据从数据库中查询出来,然后再把对应页的数据返回给调用者,剩余的数据扔掉了。所以,这种情况下,注定用rowid不如用rownum快。
Ⅳ 一个比较实用的大数据量分页存储过程
一个比较实用的大数据量分页存储过程
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
Ⅵ 如何解决大数据量的查询问题
实际情况可能会这样,表1有产品的名称,表2没有产品的名称。所以如果在查询中,版要包含表1中的字段权的话,就要用到关联,所以最好,将表1和表2都在ID上建索引。再关联;如果不包含表1的话,只需给表2建索引。
根据这里的环境来看,走索引会比走全表扫描来的快些。
然后可以在SQLPLUS环境下,启动跟踪功能,查看这个语句的执行计划情况
SQL优化方面,可以参考oracle性能调整方面的书籍
以上参考!
Ⅶ 求教大数据量查询方案
分页查抄询一般 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;
这样查询时间基本固定,不会随着数据量的增长而发生变化。
-
Ⅷ 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;
这样查询时间基本固定,不会随着数据量的增长而发生变化。
Ⅸ 对于多表关联的,大数据分页,怎么整sql
SELECT*
FROM(SELECT查询字段,
ROW_NUMBER()OVER(ORDERBY排序字段)ASNum
FROM表1a
INNERJOIN表2bONa.关联字段=b.关联字段
)t
WHEREt.NumBETWEEN10AND20
Ⅹ 大数据量 用rownum 分页查询 order by 会导致执行很慢, 怎么办
请查考这两篇文章
《几种分页算法》
http://blog.csdn.net/jww2002/articles/558151.aspx
《海量数据库的查询优化及分页算法方案》
http://blog.csdn.net/chenjinjie/archive/2007/05/28/1628355.aspx