select * from (SELECT * FROM tablename ORDER  BY dbms_random.value) where rownum <= 3

解决方案 »

  1.   

    select * from tablename where rownum <= 3
      

  2.   


    因为 duanzilin(寻) 的方式用到了排序,对于大量数据,必然会耗费较多时间,也可能耗费
    临时表空间,因此如果有10万条数据的话,建议用随机采样函数 SAMPLE:SELECT * FROM (SELECT *FROM B SAMPLE(0.01)) WHERE ROWNUM<=3;内层查询获取 10万 * 0.01% 大约 10条左右的数据,不需要排序,而且每次的结果也不同
      

  3.   

    楼上说的没错,random函数确实消耗比较大,但是更符合用户需求,有时候牺牲下性能上代价也在所难免的;SAMPLE函数局限性太大,在子查询,视图,存在表连接的时候都不能使用,而且查询间隔周期短的时候,随机性太低,一般都很少用到可以看到下面例子,前面连续执行3次结果一样的,要有一定时间间隔才能体现随机性SQL> create table TEST(COL1 NUMBER,COL2 VARCHAR2(50),COL3 VARCHAR2(50));Table createdSQL> INSERT INTO test SELECT ROWNUM,'N' || ROWNUM,'V' || ROWNUM FROM dual CONNECT BY ROWNUM <=10000;10000 rows insertedSQL> COMMIT;Commit completeSQL> SELECT * FROM (SELECT *FROM test SAMPLE(0.1)) WHERE ROWNUM<=3;      COL1 COL2                                               COL3
    ---------- -------------------------------------------------- --------------
           890 N890                                               V890
          1637 N1637                                              V1637
          1176 N1176                                              V1176SQL> /      COL1 COL2                                               COL3
    ---------- -------------------------------------------------- --------------
           890 N890                                               V890
          1637 N1637                                              V1637
          1176 N1176                                              V1176SQL> /      COL1 COL2                                               COL3
    ---------- -------------------------------------------------- --------------
           890 N890                                               V890
          1637 N1637                                              V1637
          1176 N1176                                              V1176SQL> /      COL1 COL2                                               COL3
    ---------- -------------------------------------------------- --------------
          4325 N4325                                              V4325
          2023 N2023                                              V2023
          2294 N2294                                              V2294