pengpenglin
人,必须选择一种生活方式并有勇气坚持下去
BlogJava
首页
新随笔
新文章
联系
聚合
管理
posts - 262, comments - 221, trackbacks - 0
【原】Oracle开发专题之:随机查询
【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
阅读(1957)
评论(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张表进行连接,是不是说明数据库的表的设计有问题?那,一个什么样的表连接数值才是合适的数据库表的设计呢?
谢谢。
祝顺利,健康。
回复
更多评论
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
Chat2DB
C++博客
博问
管理
相关文章:
【原】Oracle开发专题之:时间运算2(日期截取及四舍五入)
【原】Oracle开发专题之:时间运算
【原】Oracle开发专题之:分析函数总结
【原】Oracle开发专题之:报表函数
【原】Oracle开发专题之:窗口函数
【原】Oracle应用专题之:分析函数3(Top/Bottom N、First/Last、NTile)
【原】Oracle开发专题之:分析函数2(Rank, Dense_rank, row_number)
【原】Oracle开发专题之:分析函数(OVER)
【原】Oracle开发专题之:删除重复记录
【原】Oracle开发专题之:行列转换
<
2009年3月
>
日
一
二
三
四
五
六
22
23
24
25
26
27
28
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(21)
给我留言
查看公开留言
查看私人留言
随笔分类
J2EE 框架(9)
J2EE基础(4)
J2SE(43)
Java 工具(5)
Oracle Concept(4)
Oracle SQL/PLSQL(9)
Oracle 开发(13)
Oracle 管理(4)
Oracle 调优
Oracle 错误诊断
RoR(19)
UML(3)
Unix / Linux(13)
Web基础(19)
其它技术(7)
感悟(3)
杂项(7)
架构与性能(8)
模式与重构(19)
灌水(8)
电影与音乐(16)
走过的路(1)
软件过程与软件方法(3)
阳光户外(2)
项目管理(36)
随笔档案
2012年2月 (3)
2011年11月 (4)
2011年10月 (1)
2011年9月 (2)
2011年8月 (2)
2011年7月 (5)
2011年6月 (3)
2011年5月 (1)
2011年4月 (1)
2011年3月 (3)
2011年1月 (1)
2010年12月 (1)
2010年11月 (5)
2010年10月 (3)
2010年9月 (1)
2010年7月 (1)
2010年6月 (1)
2010年5月 (4)
2010年4月 (9)
2010年3月 (19)
2010年2月 (8)
2010年1月 (3)
2009年12月 (34)
2009年11月 (1)
2009年10月 (2)
2009年7月 (4)
2009年6月 (5)
2009年5月 (3)
2009年4月 (2)
2009年3月 (1)
2009年2月 (5)
2009年1月 (5)
2008年12月 (13)
2008年11月 (4)
2008年10月 (1)
2008年9月 (6)
2008年8月 (5)
2008年7月 (3)
2008年6月 (31)
2008年5月 (10)
2008年4月 (9)
2008年3月 (7)
2008年2月 (4)
2008年1月 (19)
BlogJava热点博客
BeanSoft
Jack.Wang
如坐春风
诗特林
郑晖
银河使者
阿密果
隔叶黄莺
好友博客
无羽苍鹰
搜索
最新评论
1. re: 【Java基础专题】编码与乱码(01)---编码基础[未登录]
666666666666666666666这几天正在做个类似工程编码出现错误
--李
2. re: 【Java基础专题】IO与文件读写---使用Apache commons IO简化文件读写
不错
--阿斯兰
3. re: 【Java基础专题】编码与乱码(03)----String的toCharArray()方法
多谢分享
--thx
4. re: 【Java基础专题】编码与乱码(05)---GBK与UTF-8之间的转换
评论内容较长,点击标题查看
--karl
5. re: 【Java基础专题】编码与乱码(01)---编码基础[未登录]
谢谢,帮了我大忙!
--小龙
阅读排行榜
1. Oracle中如何插入特殊字符:& 和 ' (多种解决方案)(48378)
2. getOutputStream() has already been called for this response的解决方法(43328)
3. 【Java基础专题】编码与乱码(05)---GBK与UTF-8之间的转换(36968)
4. 360安全卫士误删audiosrv.dll文件造成系统无声的解决方案(21211)
5. Java中读取字节流并按指定编码转换成字符串的方法(17302)
评论排行榜
1. 360安全卫士误删audiosrv.dll文件造成系统无声的解决方案(33)
2. 【原】Oracle开发专题之:时间运算(11)
3. 【Java基础专题】编码与乱码(05)---GBK与UTF-8之间的转换(11)
4. getOutputStream() has already been called for this response的解决方法(10)
5. 【原】Oracle开发专题之:分析函数(OVER)(8)