posts - 262,  comments - 221,  trackbacks - 0
          【1】方法一:通過dbms_random.random
          select * from (select * from largetable order by dbms_random.random) where rownum <= 20000;

          【2】方法二:通過dbms_random.value
          select * from (select * from largetable order by dbms_random.value) where rownum <= 20000;

          【3】方法三:通過采樣表掃描
          select * from (select * from largetable sample(10)) where rownum <= 20000;

          下面我們通過實踐來比較這3種方法的效率,首先我們創建一個包含有10W條記錄的表用于實驗:
          create table LARGETABLE
          (
            ID       
          NUMBER not null primary key,
            BIRTHDAY DATE 
          not null
          )

          接下來我們插入10W條數據
          create or replace procedure random_insert as
            i         
          number;
            startDate date :
          = sysdate;

          begin

            
          for i in 1 .. 100000 loop
              
          insert into largetable values (i, startDate + 1);
            
          end loop commit;

          end;

          在SQL*PLUS下設置顯示SQL語句執行時間:set timing on,讓后分別運行上述三條語句:

          第一個的執行時間為 00: 00: 16: 04
          第二個的執行時間為 00: 00: 54: 04
          第三個的執行時間為 00: 00: 08: 07

          從這里我們可以看出在進行數據隨機抽取時,采用sample的方法效率是最高的。為了保證每次隨機查詢的數據盡量不重復,我們可以把sample中的百分比提高一些(例如從10%提高到20%)。

          關于Oracle Sample的介紹和用法,請參考eygle他老人家的一篇文章介紹:如何從結果集中獲得隨機結果


          -------------------------------------------------------------
          生活就像打牌,不是要抓一手好牌,而是要盡力打好一手爛牌。
          posted on 2008-06-09 17:41 Paul Lin 閱讀(1999) 評論(3)  編輯  收藏 所屬分類: Oracle 開發


          FeedBack:
          # re: 【原】Oracle開發專題之:隨機查詢
          2009-02-23 11:36 | wxf0701@gmail.com
          俺的測試結果跟你的很不一樣哦,你多次運行下看看  回復  更多評論
            
          # re: 【原】Oracle開發專題之:隨機查詢[未登錄]
          2009-03-19 15:29 | peter
          用sample代表取樣阿,我查詢時如果戴上查詢條件,如果用sample得到的查詢結果數量可能不對啊,多次查詢的數目不同?  回復  更多評論
            
          # re: 【原】Oracle開發專題之:隨機查詢
          2009-05-17 17:13 | 初學者
          看了大俠的oracle的博文,受益頗深。現有一問題想求,望復:
          在一個SQL語句中,進行表連接的最合適的表的個數是多少?例如,在一個sql語句中,涉及到了4張表連接。如果,一個sql語句涉及了10張表進行連接,是不是說明數據庫的表的設計有問題?那,一個什么樣的表連接數值才是合適的數據庫表的設計呢?

          謝謝。
          祝順利,健康。  回復  更多評論
            
          <2008年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          常用鏈接

          留言簿(21)

          隨筆分類

          隨筆檔案

          BlogJava熱點博客

          好友博客

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 禹城市| 武宣县| 焉耆| 穆棱市| 扶沟县| 青川县| 临潭县| 丹凤县| 遂川县| 祁连县| 桃园市| 高密市| 安陆市| 永年县| 兴安盟| 翁源县| 镇原县| 贵阳市| 南华县| 合山市| 阳春市| 读书| 崇礼县| 舟曲县| 仪陇县| 曲水县| 郯城县| 临泉县| 大港区| 习水县| 宁都县| 延边| 红安县| 新民市| 澜沧| 嘉荫县| 大冶市| 平利县| 林西县| 郁南县| 恭城|