在查詢資料中,對于某些資料量過大,為了減少頁面上單頁的加載時間,我們常常會選擇分頁查詢,分頁查詢有很多方法,下面主要介紹兩種分頁方法。
一. 通過主鍵來實作分頁:
1.資料庫背景. Person表,ID主鍵盤,自增1,varchar行Name.
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiInBnauMGZyUjYzEDNzImN1YGMhJDNiRTOlBDM2UGZwMjM0kDMfdWbp9CXt92Yu4GZjlGbh5SZslmZxl3Lc9CX6MHc0RHaiojIsJye.jpg)
2.裡面包含了10條資料。
3. 可以通過唯一ID,來進行分頁.
Note:SELECT TOP((@PageIndex-1)*@PageSize) ID FROM Person 查詢出前面所有的資料的ID. 然後父查詢,通過NOT IN 将已經查詢過的ID排除。
二.通過row_number() 來實作分頁查詢
1.不用主鍵也可以查詢,通過row_number來為沒一個查詢的資料标記上行号,然後在所标記的行号上進行分組取行。
三.小Tips
1.起初在寫部落格的時候,其實還想過另一種方法,不防可以提出來,大家來看看這段SQL.
2.下面是前面3個SQL執行的結果.
Note: 第三個sql是沒有資料的。對于第三條sql,原理是先取出前面頁數中最大的ID為maxID,然後取出ID大于MaxID的資料,取出前面的PageSize行,看起來的确沒問題,可是最後一條資料都沒有,這是為什麼呢,問題出在了下面這半句Sql
Note:因為ID是主鍵自己增加,在調用MAX(ID)的是其實區的是目前最大的ID. (對于目前情況MAX(ID)始終是10,是以沒資料)
四.總結:
有關MAX(ID)還請了解這方面的解釋一下為何是最大的ID.小弟也隻是在寫sql的時候發現的. 對原理不熟悉。求各位博友指點。