兩種分頁SQL效率比較

2021-05-22 01:20:43 字數 1723 閱讀 1952

資料庫版本:oracle9i r9.2.0.6

兩種方案:

1.select * from

(select a.*,rownum rn from (select * from table) a)

where rn<=20 and rn>10;

2.select * from

(select a.*,rownum rn from (select * from table) a where rownum <=20)

where rn>10;

當table表資料量增大時,二者的效能有明顯差別。

實驗:查詢表第11-20共10條記錄。

測試1:

表名:td_edu_member

表記錄數:152

測試2:

表名:td_question_content

表記錄數:366884

分別對兩個表做表分析,收集最新統計資訊。

測試1的兩個執行計畫如下:

測試1a

0  physical reads

0  redo size

1309  bytes sent via sql*net to client

495  bytes received via sql*net from client

2  sql*net roundtrips to/from client

0  sorts (memory)

0  sorts (disk)

10  rows processed

測試1b

0  physical reads

0  redo size

1309  bytes sent via sql*net to client

495  bytes received via sql*net from client

2  sql*net roundtrips to/from client

0  sorts (memory)

0  sorts (disk)

10  rows processed

通過對比,可以看到後者的方式一致性讀取次數少於前者。

接著看大表的測試執行計畫

測試2a:

0  redo size

11961  bytes sent via sql*net to client

6245  bytes received via sql*net from client

52  sql*net roundtrips to/from client

0  sorts (memory)

0  sorts (disk)

10  rows processed

測試2b:

0  redo size

11961  bytes sent via sql*net to client

6245  bytes received via sql*net from client

52  sql*net roundtrips to/from client

0  sorts (memory)

0  sorts (disk)

10  rows processed

經過對比發現,後者一致性讀取次數及物理讀取次數明顯少於前者。另外,當獲取記錄逐漸靠後時,二者的查詢計畫差異逐漸縮小

實驗在此省略。

通過以上判斷,分頁使用第二種方案效率較高,表資料量越大時,效果越明顯。

兩種排序方法的效率比較

前提 筆記本測試,效能一般,測試前開了好多記憶體殺手。唯一變數 陣列的長度,其餘各項均不發生變化。此測試不具有一般性 資料量太少,實驗重複次數不夠,沒有空白對比試驗 聽著怎麼像是生物實驗了 如果感興趣,可以自己做重複實驗。第一種,經典的氣泡排序,如下 a long start system.curr...

Sql分頁兩種常用演算法

今天花了兩個小時,寫了兩種分頁的演算法。not in刪選法,這種方法查詢某個表中前面的資料效率高 create procedure page proc pagesize int,頁數,pageindex int,頁碼 tablename varchar 50 表名 mast varchar 50 表...

BitCount兩種實現以及效率比較

輸入乙個整數,輸出該數二進位制表示中1的個數。其中負數用補碼表示。一 第一種實現 這也是比較多人使用的一種演算法。public static int bitcount int i return count 二 第二種實現檢視integer類,發現其中提供了乙個bitcount介面,具體的實現如下 r...