Oracle隨機抽取記錄的方法

bolan392發表於2010-09-07

Oracle中隨機抽取10條記錄:

 

 select * from (select * from tablename order by order by dbms_random.value) where rownum<11

 

這個方法的原理我認為應該是把表中的資料全部查詢出來按照隨機數進行排列後在從查詢出來的資料中查詢中6條記錄,這個方法我在使用的過程中發現,如果記錄一多的話查詢的速度有一點點的慢,測試時是7000條,如果幾萬幾十萬的話可能就更慢了。

 

 第二個是利用oracle的sample()或sample block方法:

 

select * from tablename sample ( 50 ) where rownum<6

 

Oracle訪問資料的基本方法有:


     1.全表掃描
     2.取樣表掃描

 

全表掃描(Full table Scan)


     全表掃描返回表中所有的記錄。
     執行全表掃描,Oracle讀表中的所有記錄,考查每一行是否滿足WHERE條件。Oracle順序的讀分配給該表的每一個數

     據塊,這樣全表掃描能夠受益於多塊讀.每個資料塊Oracle只讀一次.

 

取樣表掃描(sample table scan)


     取樣表掃描返回表中隨機取樣資料。
     這種訪問方式需要在FROM語句中包含SAMPLE選項或者SAMPLE BLOCK選項.

 

     SAMPLE選項:


          當按行取樣來執行一個取樣表掃描時,Oracle從表中讀取特定百分比的記錄,並判斷是否滿足WHERE子句以返回 

          結果。

 

     SAMPLE BLOCK選項:


         使用此選項時,Oracle讀取特定百分比的BLOCK,考查結果集是否滿足WHERE條件以返回滿足條件的紀錄.

 

     Sample_Percent:


         Sample_Percent是一個數字,定義結果集中包含記錄佔總記錄數量的百分比。
         Sample值應該在[0.000001,99.999999]之間。

 

 

相關文章