当前位置:首页 » 编程语言 » 大数据分页sql查询

大数据分页sql查询

发布时间: 2022-08-07 03:29:32

sql Server数据库用sql语句实现分页查询 (从M条数据开始,查找N条记录。sqlserver数据库。请举例说明。)

1:新建一个数据库
create database 数据库名
2:新建一个表
create table 表名
(
字段名 类型 是否为空
)
3:删除一个表
drop table 表名
4:增加一个记录
insert 表名 [(字段)] values ( 内容 )
5:删除一个记录
delete [from] 表名 where 条件
6、修改一个记录
update 表名 set 字段名=更新内容 where 条件
7、在原表中增加一个字段
alter table 表名 add column 字段名 类型
8:在原表中删除一个字段
alter table 表名 drop column 字段名
9、查询一个表记录
select * from 表名
10、带条件查询一个表记录
select * from 表名 where =条件

❷ sql语句查询加分页

你的意思是前五行是固定的,后十行进行分页是么,前五行固定写死,后十行用参数或动态sql来进行分页。例如第一页:
select top 5 id,readcount,weight from table1 order by readcount desc
union all
select top 10,id,readcount,weight from table1 order by weight desc --这句进行动态sql或传参数进行分页,网上分页的sql很多。有问题再追问。

❸ SQL如何实现数据分页,要具体语句,谢谢

可以的,用存储过程

分页存储过程如下

CREATE PROCEDURE GetRecordFromPage
@tblName varchar(255), -- 表名
@RetColumns varchar(1000) = '*', -- 需要返回的列,默认为全部
@Orderfld varchar(255), -- 排序字段名
@PageSize int = 10, -- 页尺寸
@PageIndex int = 1, -- 页码
@IsCount bit = 0, -- 返回记录总数, 非 0 值则返回
@OrderType varchar(50) = 'asc', -- 设置排序类型, 非 asc 值则降序
@strWhere varchar(1000) = '' -- 查询条件 (注意: 不要加 where)
AS

declare @strSQL varchar(1000) -- 主语句
declare @strTmp varchar(300) -- 临时变量
declare @strOrder varchar(400) -- 排序类型

if @IsCount != 0 --执行总数统计

begin
if @strWhere != ''
set @strSQL = "select count(*) as Total from [" + @tblName + "] where " + @strWhere
else
set @strSQL = "select count(*) as Total from [" + @tblName + "]"
end

else --执行查询操作

begin

if @OrderType != 'asc'
begin
set @strTmp = "<(select min"
set @strOrder = " order by [" + @Orderfld +"] desc"
end
else
begin
set @strTmp = ">(select max"
set @strOrder = " order by [" + @Orderfld +"] asc"
end

set @strSQL = "select top " + str(@PageSize) + " " + @RetColumns + " from ["
+ @tblName + "] where [" + @Orderfld + "]" + @strTmp + "(["
+ @Orderfld + "]) from (select top " + str((@PageIndex-1)*@PageSize) + " ["
+ @Orderfld + "] from [" + @tblName + "]" + @strOrder + ") as tblTmp)"
+ @strOrder

if @strWhere != ''
set @strSQL = "select top " + str(@PageSize) + " " + @RetColumns + " from ["
+ @tblName + "] where [" + @Orderfld + "]" + @strTmp + "(["
+ @Orderfld + "]) from (select top " + str((@PageIndex-1)*@PageSize) + " ["
+ @Orderfld + "] from [" + @tblName + "] where (" + @strWhere + ") "
+ @strOrder + ") as tblTmp) and (" + @strWhere + ") " + @strOrder

if @PageIndex = 1
begin
set @strTmp = ""
if @strWhere != ''
set @strTmp = " where (" + @strWhere + ")"

set @strSQL = "select top " + str(@PageSize) + " " + @RetColumns + " from ["
+ @tblName + "]" + @strTmp + " " + @strOrder
end
end

exec (@strSQL)

❹ sqlserver2000 如何提高分页查询大数据量的效率

sqlserver2005及以上的版本有row_number()函数可以高效分页,sqlserver2000的话只能看算法

❺ sql2000最有效率的分页sql 语句(解决大数据量)

/*
Function:
SuperPaging
*
Description:
*
超强通用分页存储过程
*
Example:
*
SuperPaging
@TableName='表名',@Orderfld='排序列名'
*/
CREATE
PROCEDURE
SupesoftPage
(
@TableName
nvarchar(50),
--
表名
@ReturnFields
nvarchar(2000)
=
'*',
--
需要返回的列
@PageSize
int
=
10,
--
每页记录数
@PageIndex
int
=
1,
--
当前页码
@Where
nvarchar(2000)
=
'',
--
查询条件
@Orderfld
nvarchar(2000),
--
排序字段名
最好为唯一主键
@OrderType
int
=
1
--
排序类型
1:降序
其它为升序
)
AS
DECLARE
@TotalRecord
int
DECLARE
@TotalPage
int
DECLARE
@CurrentPageSize
int
DECLARE
@TotalRecordForPageIndex
int
DECLARE
@OrderBy
nvarchar(255)
DECLARE
@CutOrderBy
nvarchar(255)
if
@OrderType
=
1
BEGIN
set
@OrderBy
=
'
Order
by
'
+
REPLACE(@Orderfld,',','
desc,')
+
'
desc
'
set
@CutOrderBy
=
'
Order
by
'+
REPLACE(@Orderfld,',','
asc,')
+
'
asc
'
END
else
BEGIN
set
@OrderBy
=
'
Order
by
'
+
REPLACE(@Orderfld,',','
asc,')
+
'
asc
'
set
@CutOrderBy
=
'
Order
by
'+
REPLACE(@Orderfld,',','
desc,')
+
'
desc
'
END
--
记录总数
declare
@countSql
nvarchar(4000)
set
@countSql='SELECT
@TotalRecord=Count(*)
From
'+@TableName+'
'+@Where
execute
sp_executesql
@countSql,N'@TotalRecord
int
out',@TotalRecord
out
SET
@TotalPage=(@TotalRecord-1)/@PageSize+1
SET
@CurrentPageSize=@PageSize
IF(@TotalPage=@PageIndex)
BEGIN
SET
@CurrentPageSize=@TotalRecord%@PageSize
IF(@CurrentPageSize=0)
SET
@CurrentPageSize=@PageSize
END
--
返回记录
set
@TotalRecordForPageIndex=@PageIndex*@PageSize
exec('SELECT
*
FROM
(SELECT
TOP
'+@CurrentPageSize+'
*
FROM
(SELECT
TOP
'+@TotalRecordForPageIndex+'
'+@ReturnFields+'
FROM
'+@TableName+'
'+@Where+'
'+@OrderBy+')
TB2
'+@CutOrderBy+')
TB3
'+@OrderBy)
--
返回总页数和总记录数
SELECT
@TotalPage
as
PageCount,@TotalRecord
as
RecordCount
GO

❻ 有单表千万数据量,现在要分页显示,怎么快速sql查询

/*===============================================*/
/*Author:www.51pansou.com*/
/*==============================================*/
ALTERPROCEDURE[dbo].[Pg_Paging]
@Tablesvarchar(1000),--表名,多红表是请使用tAainnerjointBbOna.AID=b.AID
@PKvarchar(100),--主键,可以带表头a.AID
@Sortvarchar(200)='',--排序字段
@PageNumberint=1,--开始页码
@PageSizeint=10,--页大小
@Fieldsvarchar(1000)='*',--读取字段
@Filtervarchar(1000)=NULL,--Where条件
@Groupvarchar(1000)=NULL,--分组
@isCountbit=0--1--是否获得总记录数
AS
--
--select*fromGL_NEWSorderbyGN_UPDATE_DATEDESC
--execPg_Paging@Tables='tb_NewsInfo',@PK='News_ID',@Sort='News_IDDESC',@PageNumber=2,@PageSize=15,@Fields='*',@Group='',@isCount=0
DECLARE@strFiltervarchar(2000)
declare@sqlvarchar(8000)
IF@FilterISNOTNULLAND@Filter!=''
BEGIN
SET@strFilter='WHERE'+@Filter+''
END
ELSE
BEGIN
SET@strFilter=''
END

if@isCount=1--只获得记录条数
begin
set@sql='SELECTCount(*)FROM'+@Tables+@strFilter
end
else
begin
if@Sort=''
set@Sort=@PK+'DESC'

IF@PageNumber<1
SET@PageNumber=1

if@PageNumber=1--第一页提高性能
begin
set@sql='selecttop'+str(@PageSize)+''+@Fields+'from'+@Tables+''+@strFilter+'ORDERBY'+@Sort
end
else
begin
/**//*Executedynamicquery*/
DECLARE@START_IDvarchar(50)
DECLARE@END_IDvarchar(50)
SET@START_ID=convert(varchar(50),(@PageNumber-1)*@PageSize+1)
SET@END_ID=convert(varchar(50),@PageNumber*@PageSize)
set@sql='SELECT'+@Fields+'
FROM(SELECTROW_NUMBER()OVER(ORDERBY'+@Sort+')ASrownum,
'+@Fields+'
FROM'+@Tables+''+@strFilter+')ASD
WHERErownumBETWEEN'+@START_ID+'AND'+@END_ID+'ORDERBY'+@Sort
END

END
--print@sql

EXEC(@sql)

❼ 一条sql语句实现分页查询,且能返回记录总数

select *,(select count(*) from t1) from(
select top 2 * from(
select top 4 * from(
select * from t1
)as ttb0 order by id
)as ttb1 order by id desc
)as ttb2 order by id
在select后加个子查询就OK了,

❽ 如何用sql语句 实现分页查询

适用于 SQL Server 2000/2005

SELECT TOP 页大小 *

FROM table1

WHERE id NOT IN

SELECT TOP 页大小*(页数-1) id FROM table1 ORDER BY id

❾ (问题解决再追加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写入代码的执行效率,这部分是很值得研究的。

热点内容
通达信自定义板块在哪个文件夹 发布:2024-05-06 09:56:37 浏览:103
在linux搭建mqtt服务器搭建 发布:2024-05-06 09:52:00 浏览:558
windowspython23 发布:2024-05-06 09:27:50 浏览:746
编程ug开初 发布:2024-05-06 09:27:48 浏览:560
小白源码论坛 发布:2024-05-06 09:24:56 浏览:139
android进程重启 发布:2024-05-06 09:15:09 浏览:96
ie浏览器设置默认ftp 发布:2024-05-06 09:14:03 浏览:885
迈腾尊贵中控配置怎么使用 发布:2024-05-06 09:13:28 浏览:656
奥迪存储卡格式不正确请格式化存储卡 发布:2024-05-06 09:01:31 浏览:34
个人信用数据库 发布:2024-05-06 09:00:34 浏览:417