sql server實現分頁查詢

2021-06-04 14:54:15 字數 1823 閱讀 7549

資料庫分頁查詢:

一、       mysql 資料庫分頁查詢

mysql資料庫實現分頁比較簡單,提供了limit函式。一般只需要直接寫到sql語句後面就行了。

limit子句可以用來限制由select語句返回過來的資料數量,它有乙個或兩個引數,如果給出兩個引數, 第乙個引數指定返回的第一行在所有資料中的位置,從0開始(注意不是1),第二個引數指定最多返回行數。例如: 

select * from table where … limit 10; #返回前10行 

select * from table where … limit 0,10; #返回前10行

select * from table where … limit 10,20; #返回第10-20行資料 

二、       sqlserver資料庫分頁查詢

有兩種方案:

分頁方案一:(利用not in和select top分頁)

語句形式:

select top 10 *

from testtable

where (id not in

(select top 20 id

from testtable

order by id))

order by id

select top 頁大小 *

from testtable

where (id not in

(select top 頁大小*頁數 id

from 表

order by id))

order by id

-------------------------------------

分頁方案二:(利用id大於多少和select top分頁)

語句形式:

select top 10 *

from testtable

where (id >

(select max(id)

from (select top 20 id

from testtable

order by id) as t))

order by id

select top 頁大小 *

from testtable

where (id >

(select max(id)

from (select top 頁大小*頁數 id

from 表

order by id) as t))

order by id

通過sql 查詢分析器,顯示比較:我的結論是:

分頁方案二:(利用id大於多少和select top分頁)效率最高,需要拼接sql語句

分頁方案一:(利用not in和select top分頁)   效率次之,需要拼接sql語句

以上語句的有乙個致命的缺點,就是它含有not in字樣,要換成用not exists來代替not in,二者的執行效率實際上是沒有區別的。

在以上分頁演算法中,影響我們查詢速度的關鍵因素有兩點:top和not in。top可以提高我們的查詢速度,而not in會減慢我們的查詢速度,所以要提高我們整個分頁演算法的速度,就要徹底改造not in,同其他方法來替代它。

我們知道,幾乎任何字段,我們都可以通過max(字段)或min(字段)來提取某個欄位中的最大或最小值,所以如果這個欄位不重複,那麼就可以利用這些不重複的字段的max或min作為分水嶺,使其成為分頁演算法中分開每頁的參照物。在這裡,我們可以用操作符「>」或「<」號來完成這個使命。

SQL Server 分頁查詢

ps,此文是純個人筆記 公司裡乙個專案裡用到了一種資料庫分頁查詢的方式 1 定義乙個臨時的table 這個table有乙個自增的之間id,和要查的資料表的主鍵id 2 再一次查詢,用id在分頁數段來and 一下結果 具體操作如下 定義個臨時表 temptable declare temptable ...

SQL SERVER 分頁查詢

方式一 row number select top 頁大小 from select row number over order by id as rownumber,from table1 as a where rownumber 頁大小 當前頁 1 註解 首先利用row number 為table...

Sql Server 分頁查詢

sql server 中通過sql語句實現分頁查詢 方案一 利用not in和select top分頁 select top 頁大小 from 表名 where id not in select top 頁大小 頁數 1 id from 表名 order by id order by id 方案二 ...