2013-04-12

取得分頁資料的SQL語法

使用.net之後,雖然有好用的DataGrid來自動幫我們分頁資料,但我們有特殊用途的時候(譬如說利用ajax動態取得第N頁的資料),就還是必須自己處理資料庫分頁。

參考了這裡之後,得知可直接從SQL語法下手,也就是如下的SQL語法:


SELECT TOP  @Rows *  FROM Table A
WHERE A.ID
NOT IN ( SELECT TOP ( @Rows * @PageIndex ) ID FROM Table B order by B.ID )
Order by A.ID

@Rows就是每頁要顯示多少筆的資料,@PageIndex就是要抓第幾頁的資料減1,因為第一頁一定是抓最前面N筆,所以ID不可以在B裡面被挑出來,所以就不正確了。

但我對此抱持一個懷疑,當資料量變大的時候是否會有效能問題?用NOT IN會比較消耗資料庫效能,或是如果做好Index就不會有了?反正ID是PK,一定會有Index,是這樣嗎?