最近在寫Angular7專案 由於考量到資料筆數過大時使用Table呈現效能不如預想
所以打算在使用 table paging時只撈取當下顯示資料部分 切換時再重撈 減少每次所需要的撈取資料量
所以就需要取得某區間的資料 由於之前都使用MS SQL比較多 理想中靠感覺Between就能搞定 但Oracle還有要特別處理的地方
這部分花了不少時間才搞定 順便做個小記錄
首先我們會有最基礎的搜尋語法
Select ID,NAME,LOCATIONNO
From UserProfile
WHERE LOCATIONNO = :LOCATIONNO
接著我們需要排序 排序可以讓我們取區間資料時擁有一定的規則
以及想辦法讓資料每一列都有編號 方便我們取得某一區塊的資料
Select ID,NAME,LOCATIONNO,ROWNUM RM
From UserProfile
WHERE LOCATIONNO = :LOCATIONNO
ORDER BY ID
上面是理想應該就會對的做法 但實際上這樣產生出的結果並不是我們需要的 因為Oracle當中 ROWNUM優先於 ORDER BY
所以撈取資料就發現 ROWNUM 不是由低到高
那要怎樣做呢 子查詢 先排序後的結果再加上 ROWNUM 就可以達到我需要的效果
Select UPF.*,ROWNUM RM From
(
Select ID,NAME,LOCATIONNO
From UserProfile
WHERE LOCATIONNO = :LOCATIONNO
ORDER BY ID
) UPF
接著呢 排好的ROWNUM都出現了 我可以用 BETWEEN了吧
當然你直接拿WHERE RM 會跟你說沒這鬼玩意
怎麼做呢 子查詢大神又要出來了..
Select * From
(
Select UPF.*,ROWNUM RM From
(
Select ID,NAME,LOCATIONNO
From UserProfile
WHERE LOCATIONNO = :LOCATIONNO
ORDER BY ID
) UPF
)
Where RM BETWEEN 10 AND 20
最後取得區間資料完成 或許有更好的寫法
這是我當下研究所得 有更好的方法 請提供給我
因為這樣其實效能還是有點.....
但比一次撈出來前端直接死機好了...