當前位置:首頁 » 編程語言 » 大數據分頁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-04-24 07:55:09 瀏覽:603
linuxcpu佔用進程 發布:2024-04-24 07:37:05 瀏覽:119
河南移動鶴壁dns伺服器地址 發布:2024-04-24 07:36:58 瀏覽:593
百度賬號密碼怎麼設置密碼 發布:2024-04-24 07:27:37 瀏覽:759
cf窗口化源碼 發布:2024-04-24 07:04:33 瀏覽:738
linuxi2c設備 發布:2024-04-24 06:53:50 瀏覽:346
寶馬x5買什麼配置性價比高 發布:2024-04-24 06:45:22 瀏覽:850
最小的編程語言 發布:2024-04-24 06:44:16 瀏覽:818
自動發朋友圈腳本 發布:2024-04-24 06:40:32 瀏覽:155
最早存儲盤 發布:2024-04-24 06:39:54 瀏覽:944