採樣表掃描(sample table scan):掃描返回表中隨機採樣數據,這種訪問方式須要在FROM語句中包含SAMPLE選項或者SAMPLE BLOCK選項.測試
注:從Oracle8i開始Oracle提供採樣表掃描特性 spa
二、使用sample得到隨機結果集 table
2.一、語法: SAMPLE [ BLOCK ](sample_percent)[ SEED (seed_value) ] object
SAMPLE選項:表示按行採樣來執行一個全表掃描,Oracle從表中讀取特定百分比的記錄,並判斷是否知足WHERE子句以返回結果。 select
BLOCK: 表示使用隨機塊例舉而不是隨機行例舉。 語法
sample_percent:是隨機獲取一張表中記錄的百分比。好比值爲10,那就是表中的隨機的百分之10的記錄。 數據
值必須大於等於.000001,小於100。 查詢
SEED:表示從哪條記錄返回,相似於預先設定例舉結果,於是每次返回的結果都是固定的。該值必須介於0和4294967295之間。 db
2.二、舉例說明 tab
建立測試臨時表:
Sql代碼
SQL>create table zeeno as select * from dba_objects;
1)、sample(sample_percent):
Sql代碼
-- 從表zeeno中「全表掃描」隨機抽取10%的記錄,隨機查詢5條記錄
SQL>select object_name from zeeno sample(10) where rownum<6;
OBJECT_NAME
--------------------------------------------------------------------------------
UET$
VIEW$
I_SUPEROBJ2
TRIGGERCOL$
I_VIEW1
SQL> /
OBJECT_NAME
--------------------------------------------------------------------------------
I_FILE1
IND$
CLU$
FET$
I_COBJ#
2)、sample block(sample_percent)
Sql代碼
-- 從表zeeno中「採樣表掃描」隨機抽取10%的記錄,隨機查詢5條記錄
SQL> select object_name from zeeno sample block(10) where rownum<6;
www.2cto.com
OBJECT_NAME
--------------------------------------------------------------------------------
URIFACTORY
DBMS_XMLGEN
DBMS_XMLGEN
DBMS_XMLSTORE
DBMS_XMLSTORE
3)、sample block(sample_percent) seed(seed_value)
Sql代碼
-- 使用seed,返回固定的結果集。從表zeeno中「採樣表掃描」隨機抽取10%的記錄,隨機查詢5條記錄。
SQL> select object_name from zeeno sample(10) seed(10) where rownum<6;
OBJECT_NAME
--------------------------------------------------------------------------------
UET$
I_CON1
I_FILE2
FET$
I_COL1
SQL> select object_name from zeeno sample(10) seed(10) where rownum<6;
OBJECT_NAME
--------------------------------------------------------------------------------
UET$
I_CON1
I_FILE2
FET$
I_COL1
注意如下幾點:
1.sample只對單表生效,不能用於錶鏈接和遠程表
2.sample會使SQL自動使用CBO