資料庫版本: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...