导航:首页 > 数据处理 > 亿级数据如何分页

亿级数据如何分页

发布时间:2022-07-09 22:45:50

① 求MSSQL 海量高效率数据分页存储过程

过程一:
select top N条记录 * from 文章表 where id not in(select top M条记录 id from 文章表 order by id desc ) order by id desc

过程二:
select top N条记录 * from 文章表 where id <(select min(id) from (select top M条记录 id from 文章表 order by id desc ) as tblTmp) order by id desc
过程三:
数据库中写语句!
create database mydb
go
use mydb
go
create table news
(id varchar(50) primary key,
name varchar(50)
)
go
insert into news values('020','sss')
insert into news values('021','ttt')
insert into news values('022','uuu')
insert into news values('001','aaa')
insert into news values('002','bbb')
insert into news values('003','ccc')
insert into news values('004','aaa')
insert into news values('005','ddd')
insert into news values('006','eee')
insert into news values('007','fff')
insert into news values('008','ggg')
insert into news values('009','hhh')
insert into news values('010','iii')
insert into news values('011','jjj')
insert into news values('012','kkk')
insert into news values('013','lll')
insert into news values('014','mmm')
insert into news values('015','nnn')
insert into news values('016','ooo')
insert into news values('017','ppp')
insert into news values('018','qqq')
insert into news values('019','rrr')
go
select * from news
go

create proc proc_cursor --定义存储过程
@pagesize int, --每页有多少条数据
@pageindex int, --第几页
@pagetotal int output --总页数
as
begin
declare @total int,@start int,@end int,@id varchar(10),@name varchar(10),@i int
--定义几个变量,作用后面解释

declare mycur scroll cursor
for
select * from news order by ID
--定义一个滚动游标

open mycur
--打开游标

set @total = @@cursor_rows
--得到总的记录数

if @total> 0
begin
if @total % @pagesize = 0
set @pagetotal = @total / @pagesize
else
set @pagetotal = @total / @pagesize + 1
--得到总页数

if @pageindex < 1 set @pageindex = 1
if @pageindex > @pagetotal
set @pageindex = @pagetotal
--检查输入页数,确保它在1到总页数之间

set @start = (@pageindex-1)*@pagesize+1
--游标第一次移动到的位置,比如我们需要第11到15条记录,那么这个参数的值是11
set @end= @pageindex*@pagesize
--游标第二次移动到的位置,如上,这个值应该是15
if @end > @total
set @end = @total
--确保第二次移动不超过记录的总条数

set @i=@start
while(@i<=@end)
begin
fetch absolute @i from mycur into @id,@name
print @id+' '+@name
set @i=@i+1
end
end
else
begin
set @pagetotal = 0
select top 0 * from news
end
close mycur
--关闭游标
deallocate mycur
--释放游标
end
go

declare @pagetotal int
exec proc_cursor 5,7, @pagetotal output
--执行存储过程
print ' '
print '共'+convert(varchar(10),@pagetotal)+'页'
go

drop proc proc_cursor
--删除存储过程
use master
go
drop database mydb
--删除数据库
go
然后你在直接调用就OK啦么!
过程4:
create table book(
id int IDENTITY (1, 1) NOT NULL ,
category varchar(20) not null,
name varchar(20) not null,
author varchar(20) ,
publish varchar(20)
);

insert into book (category,name,author,publish) values('物理','物理练习一','李力','大连');
insert into book (category,name,author,publish) values('物理','物理练习二','王军','大连');
insert into book (category,name,author,publish) values('物理','物理练习三','李力','大连');
insert into book (category,name,author,publish) values('物理','物理练习四','王军','大连');
insert into book (category,name,author,publish) values('英语','英语练习一','李力','大连');
insert into book (category,name,author,publish) values('英语','英语练习二','王军','大连');
insert into book (category,name,author,publish) values('英语','英语练习三','李力','大连');
insert into book (category,name,author,publish) values('英语','英语练习四','王军','大连');
insert into book (category,name,author,publish) values('数学','数学练习一','李力','大连');
insert into book (category,name,author,publish) values('数学','数学练习二','李力','大连');
insert into book (category,name,author,publish) values('数学','数学练习三','李力','大连');
insert into book (category,name,author,publish) values('数学','数学练习四','李力','大连');
insert into book (category,name,author,publish) values('数学','数学练习五','李力','大连');
insert into book (category,name,author,publish) values('数学','数学练习六','李力','大连');
insert into book (category,name,author,publish) values('数学','数学练习七','李力','大连');

SELECT TOP 2 * FROM book WHERE (ID NOT IN(SELECT TOP 4 idFROM bookORDER BY id))ORDER BY ID;
分页公式:
select top 页大小 * from 表名
where (id not in(select top ((页码-1)*页大小) id from 表名 order by id)) order by id;
条件查询:
select top 页大小 * from table1 where category='数学' and (ID NOT IN (SELECT TOP ((页码-1)*页大小) id FROM table1
ORDER BY id)) ORDER BY ID;
这就对没问题啦!
供你参考!希望对你有帮助

② mysql 如何处理亿级数据

1、数据表 collect ( id, title ,info ,vtype) 就这4个字段,其中 title 用定长,info 用text, id 是逐渐,vtype是tinyint,vtype是索引。这是一个基本的新闻系统的简单模型。现在往里面填充数据,填充10万篇新闻。

③ 在EXCEL表格中,怎样把大量数按所需要分页呢下面这个表中左边的123是怎么弄出来的是做什么用的

可用高级筛选公式:在空白表格中,数据--》高级筛选,根据弹出框,选择将筛选结果复制到其他位置;列表区域、条件区域、复制到,三个框框分别填写对应的区域,这样就可以分页显示您所需要的数据了。
图中的123:通过数据分类汇总;或手动连续选则几行,点击数据--》组合--》组合可做出,当点击3的时候为显示所有明细行分类汇总行和汇总行,当点击2的时候,隐藏明细数据行,显示明细数据的分类汇总行及汇总行,当点击1的时候,隐藏明细数据行和分类汇总行,显示汇总行。

④ (问题解决再追加100分)sql server存储过程实现查询数据条数过大,分页查询怎么实现

按说5-8w这样数量级的数据没有问题,写入Excel是布比较耗性能,主要还是要通过优化写入Excel的代码效率上去考虑。你可以考虑利用分批查询写入的方式来避免一次写太多的数据到Excel:将你的查询结果分段,比方你的语句中能不能用时间来认为分段,每次返回部分结果。
回到你的问题,对大数据量查询的解决方案有以下两种:
(1)、将全部数据先查询到内存中,然后在内存中进行分页,这种方式对内存占用较大,必须限制一次查询的数据量。
(2)、采用存储过程在数据库中进行分页,这种方式对数据库的依赖较大,不同的数据库实现机制不通,并且查询效率不够理想。以上两种方式对用户来说都不够友好。

2.解决思路
通过在待查询的数据库表上增加一个用于查询的自增长字段,然后采用该字段进行分页查询,可以很好地解决这个问题。下面举例说明这种分页查询方案。

(1)、在待查询的表格上增加一个long型的自增长列,取名为“queryId”,mssql、sybase直接支持自增长字段,oracle可以用sequence和trigger来实现。然后在该列上加上一个索引。
添加queryId列的语句如下:
Mssql: [QUERYID] [bigint] IDENTITY (1, 1)

Sybase: QUERYID numeric(19) identity

Oracle:
CREATE SEQUENCE queryId_S
INCREMENT BY 1
START WITH 1
MAXVALUE 999999999999999 MINVALUE 1
CYCLE
CACHE 20
ORDER;
CREATE OR REPLACE TRIGGER queryId_T BEFORE INSERT
ON "test_table"
FOR EACH ROW
BEGIN
select queryId_S.nextval into :new.queryId from al;
END;

(2)、在查询第一页时,先按照大小顺序的倒序查出所有的queryId,
语句如下:select queryId from test_table where + 查询条件 +order by queryId desc 。
因为只是查询queryId字段,即使表格中的数据量很大,该查询也会很快得到结果。然后将得到的queryId保存在应用服务器的一个数组中。

(3)、用户在客户端进行翻页操作时,客户端将待查询的页号作为参数传递给应用服务器,服务器通过页号和queyId数组算出待查询的queyId最大和最小值,然后进行查询。

算出queyId最大和最小值的算法如下,其中page为待查询的页号,pageSize为每页的大小,queryIds为第二步生成的queryId数组:
int startRow = (page - 1) * pageSize
int endRow = page * pageSize - 1;
if (endRow >=queryIds.length)
{
endRow = this.queryIds.length - 1;
}
long startId =queryIds[startRow];
long endId =queryIds[endRow];

查询语句如下:
String sql = "select * from test_table" + 查询条件 + "(queryId <= " + startId + " and queryId >= " + endId + ")";

3.效果评价
该分页查询方法对所有数据库都适用,对应用服务器、数据库服务器、查询客户端的cpu和内存占用都较低,查询速度较快,是一个较为理想的分页查询实现方案。经过测试,查询4百万条数据,可以在3分钟内显示出首页数据,以后每一次翻页操作基本在2秒以内。内存和cpu占用无明显增长。

以上也仅仅是分页查询结果查看的问题,你需要写入到Excel的话还需要考虑Excel写入代码的执行效率,这部分是很值得研究的。

⑤ 如何提高亿级别 mysql group by order by 效率

1、使用用索引
注意有些情况下不能够使用索引来提高Order By语句的查询性能。
这里需要注意的是,并不是任何情况下都能够通过使用索引来提高Order Byz子句的查询效率。如对不同的关键字使用这个语句、混合使用ASC模式和DESC模式、用于查询条件的关键字与Order By语句中所使用的关键字不同、对关键字的非连续元素使用Order By子句、在同一条语句中使用不同的Order BY 和Group BY表达式、使用的表索引的类型不能够按顺序来保存行等情况,就无法通过使用索引来解决Order By语句的排序问题。此时就需要另想他法。如可以重新调整表结构或者查询语句,以满足使用这个特性的特定条件。

通常情况下,为了避免使用Order By语句导致的查询速度变慢的问题,先是需要考虑使用索引来解决问题。如果不能够通过索引来解决问题,那么可以通过缓存在一定程度来缓解。如可以增加soft_buffer_size变量的大小、根据实际情况调整Read_buffer_size变量的大小、更改tmpdir目录将其指向具有大量空闲空间的专用文件系统等等。有时候管理员可以使用这个特性将负载均匀分布到多个目录中去。

2、使用Explain关键字来确认是否可以通过索引来解决Order BY速度问题。
如可以通过使用explain select * from ad_user where is_active='Y' order by value(即在常规的查询语句前面加上一个explain关键字),用来判断是否可以使用索引来提高查询的效率。
判断的方法是:如果这个查询语句中,有一个using filesort这个字段,那么就非常的抱歉,无法通过使用索引来提高这个语句的查询效率。反之,没有这个字段,则说明可以通过索引来提高查询效率。

3、分页优化
分页程序原理很简单,这里就不多说了。

⑥ SQL表格数据超过65535如何进行分页导出EXCEL

1.升级office到2007,可以达百万条2. 使用excel2003的 数据导入,然后在语句里设定条件,或者条数3. SQL导出到文本吧。或者分类查询 直接复制出来,贴到excel里面

⑦ 处理亿级数据,分表存储,查询时如何统一查的策略,谢谢!

实时查询?这个和你的查询需求有关。一般使用HBase来实现,通过合理的设计RowKey来实时的响应查询需求。

⑧ 怎样将整个excel表中数据分页打印

步骤:
1、打开编辑好的Excel文档,选中想要打印的区域,点击页面布局选项卡,选择打印区域选项,
点击设置打印区域子选项,这时候我们就成功设置了打印区域。
2、在设置好打印区域后,我们需要对选中的打印区域的输出效果稍作调整,以符合我们的输出需求。首先按下CTRL+P,
点击预览选项;
3、在弹出的先窗口中点击页面设置,
我们可以看到:1-页面,2-页边距,3-页眉/页脚,4-工作表四个选项卡,它们分别依次负责调整页面布局,调整页边距,添加页眉和页脚,以及工作表打印输出的一些高级选项(工作表选项新手很少使用),再熟悉了整个简单的页面设置后读者可以自行尝试对每一个选项进行亲自操作。
上述调整完成后,点击确定,输出到打印机即可。

⑨ 如何对随机数据列表进行分页显示 PHP

,是可以实现,但是要增加一些判断,这样就多了没必要的PHP代码;

建议你用div写,然后控制整理宽度,也就是说你5个图片循环出来的宽度不能大于没一行的宽度,大了后,也就是第6张图的div就会从第二行开始排列了。这里设置固定的像素,就不会受浏览器的 影响。

参考这个样式代码:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>无标题文档</title>
<style type="text/css">
<!--
body {
margin-left: 0px;
margin-top: 0px;
margin-right: 0px;
margin-bottom: 0px;
}
.alldiv{
width:685px; /*137*5=685 */
}
.xunhuan {
width:137px;
float:left
}
-->
</style></head>

<body>
<div class="alldiv">
<div class="xunhuan"><img src="" width="137" height="80"></div>
<div class="xunhuan"><img src="" width="137" height="80"></div>
<div class="xunhuan"><img src="" width="137" height="80"></div>
<div class="xunhuan"><img src="" width="137" height="80"></div>
<div class="xunhuan"><img src="" width="137" height="80"></div>
<div class="xunhuan"><img src="" width="137" height="80"></div>
<div class="xunhuan"><img src="" width="137" height="80"></div>
<div class="xunhuan"><img src="" width="137" height="80"></div>
</div>
</body>
</html>

阅读全文

与亿级数据如何分页相关的资料

热点内容
淘宝调数据一般收多少钱 浏览:169
液压油西安哪里有市场 浏览:139
华为应用市场怎么更新抖音 浏览:641
沈航焊接技术是哪个学院 浏览:511
关于砖回弹法的数据分析包括哪些 浏览:156
网上的丰胸产品怎么不可以吃辣椒 浏览:964
凉茶代理市级怎么铺货 浏览:293
25该学什么技术好 浏览:467
创业者如何做产品 浏览:81
什么行业看准乡镇市场 浏览:119
产品铭牌应该定在什么位置 浏览:615
浙江税种认定信息怎么操作 浏览:166
如何辨别招聘网站信息的真伪 浏览:741
如何经营住宅租凭市场 浏览:389
代理网络怎么开 浏览:14
注塑产品白斑是怎么引起的 浏览:947
民爆信息网条码重复扫描多少预警 浏览:452
银河证券交易软件有哪些 浏览:968
应采用什么方式导入工资薪金数据 浏览:53
成都湿疹医院技术好的是哪里 浏览:694