分頁查詢

 

     分頁查詢主要有兩種形式:邏輯分頁、物理分頁。數據庫

1.邏輯分頁服務器

    1.1 含義:一次性查出全部的數據,而後在代碼邏輯中進行處理,根據頁碼和展現的數量決定具體顯示哪幾條數據性能

    1.2 優勢:查詢效率快【直接從內存中讀取】優化

    1.3 侷限性: 佔用大量內存,下降服務器的性能spa

 

2. 物理分頁【推薦使用code

    2.1 含義:根據數據庫提供的分頁功能查詢出須要顯示的具體數據【即:只查詢當前頁面顯示的數據blog

    2.2 優勢: 不影響服務器性能排序

    2.3 侷限性:  查詢速率相對較慢【每次翻頁都須要與數據庫進行交互內存

    2.4 Oracle實現:ci

SELECT * FROM (
  SELECT ROWNUM AS NUM, T.* FROM (
    SELECT * FROM T_USER ORDER BY ID ) T
   WHERE ROWNUM <= endIndex)
WHERE NUM > startIndex

        2.4.1 原理: 三層嵌套查詢 + ROWNUM

        2.4.2 三層嵌套查詢的做用及緣由:(由內向外)

 

做用

緣由

第一層

排序

ORDER BY不能放在WHERE前面

第二層

取endindex條記錄,並將ROWNUM變爲實際顯示列

ROWNUM爲隱藏列,不支持 >或 >=

第三層

截取須要的子集

獲取最終結果集

    2.5 MySql實現

SELECT * FROM actor ORDER BY first_name LIMIT startIndex,pageSize

 

3. 補充

    3.1 子查詢效率低,儘可能減小子查詢的使用

          例如:Oracle分頁能夠作如下優化

        3.1.1 不須要排序,查詢第一頁

SELECT * FROM T_USER ROWNUM < endIndex

        3.1.2 不須要排序,查詢後面幾頁

SELECT * FROM (
  SELECT ROWNUM AS NUM, T.* FROM T_USER T WHERE ROWNUM < endIndex)
WHERE NUM > startIndex

        3.1.3 須要排序,查詢第一頁

SELECT * FROM (
   SELECT * FROM T_USER ORDER BY ID ) 
WHERE ROWNUM <= endIndex

        3.1.4 須要排序,查詢後面幾頁

SELECT * FROM (
  SELECT ROWNUM AS NUM, T.* FROM (
    SELECT * FROM T_USER ORDER BY ID ) T
  WHERE ROWNUM <= endIndex)
WHERE NUM > startIndex

    3.2 推薦使用物理查詢的緣由:

        3.2.1 邏輯分頁查詢一次性將數據所有讀到內存中,佔用大量的系統資源(尤爲是數據不少的時候),影響其餘軟件的使用,下降服務器的性能

        3.2.2 物理分頁查詢只是在翻頁的時候速率較慢,可是翻頁操做使用並不頻繁,相對於邏輯查詢下降服務器性能,該影響基本能夠忽略

相關文章
相關標籤/搜索