oracle sample

Springsun的专栏目录视图 摘要视图 订阅 公告:CSDN新版博客正式上线,欢迎大家使用
oracle sample
分类: 技术心得 2008-10-29 09:51 655人阅读 评论(0) 收藏 举报
ORACLE SAMPLE 语法应用说明

这两天发了一个贴子,寻找比较好的办法随机取出表的一条记录
地址见: http://**/viewthread.php?tid=130433&extra=page%3D1
里面讨论了一些方法,其中版主valenwon加一个ROWNUM的字段并加索引是一种相对比较有效的方法,只是要改表结构,在测试库中可以,在生产库中就不行了,本文介绍了一下ORACLE SAMPLE语法的应用,采用SAMPLE也是一种解决方法,不过还不是很好,主要是返回的记录分布不均匀,要么是靠表前面的一些,要么是不返回记录。

下面是SAMPLE语法的使用示例:
选择10%的记录
select * from t1 sample(10)
选择0.1%的记录
select * from t1 sample(0.1)
根据数据块选择1%的记录
select * from t1 sample block(1)
使用数据块选择与使用记录行选择的区别:使用数据块选择表示样本的采集是基于数据块采集的,也就是说样本如果一个数据块被采集为样本,则数据块里的记录全部都是样本

样本统计是基于统计学采集的,是有概率问题,不一定完全准确,如你要取50%的记录,但实际可能返回给你49%的记录集,也可能返回给你51%的记录集

例如
如果表T1有数据块B1,B2
B1有记录R1,R2,R3,R4,R5
B2有记录R6,R7,R8,R9,R10
如果使用如下SQL选择50%的数据
select * from t1 sample block(50)
则返回的结果可能是数据块B1的记录
R1,R2,R3,R4,R5
也可能是数据块B2的记录
R6,R7,R8,R9,R10
也可能不返回记录集

如果使用如下SQL选择50%的数据
select * from t1 sample (50)
则返回的结果可能是
R2,R3,R5,R8,R9
也可能是如下的样子
R1,R3,R4,R8
 

应用示例:
随机从表中取中1条记录,选取记录的概率是1%
select * from t1 sample(1) where rownum=1
随机从表中取中10条记录,选取记录的概率是0.1%
select * from t1 sample(0.1) where rownum<=10
注:当选取的概率越低,访问表的记录数将越多

ORACLE参考手册中的相关说明:
sample_clause
The sample_clause lets you instruct Oracle to select from a random sample of rows from the table, rather than from the entire table.

BLOCK
BLOCK instructs Oracle to perform. random block sampling instead of random row sampling.

sample_percent
sample_percent is a number specifying the percentage of the total row or block count to be included in the sample. The value must be in the range .000001 to (but not including) 100.
Restrictions on Sampling During Queries
You can specify SAMPLE only in a query that selects from a single table. Joins are not supported. However, you can achieve the same results by using a CREATE TABLE ... AS SELECT query to materialize a sample of an underlying table and then rewrite the original query to refer to the newly created table sample. If you wish, you can write additional queries to materialize samples for other tables.
When you specify SAMPLE, Oracle automatically uses cost-based optimization. Rule-based optimization is not supported with this clause.
--------------------------------------------------------------------------------
Caution:
The use of statistically incorrect assumptions when using this feature can lead to incorrect or undesirable results.
--------------------------------------------------------------------------------
 
译:
Sample选项
使用sample选项的意思是指定Oracle从表中随机选择记录样本,这样比从整个表中选择更高效.
block选项
加上 BLOCK选项时表示随机取数据块,而不是随机取记录行.
sample_percent选项
sample_percent是指定总记录行或数据块为数据样本的百分比数值,这个值只能在0.000001到100之间,且不能等于100
限制
只能在单表查询的SQL中指定sample选项,不支持有连接的查询。但是,你可以使用CREATE TABLE ... AS SELECT查询的语法完成同样的效果,然后再采用新建的样本表重新编写查询SQL。
当你指定用sample时,不支持基于规则(rule)的优化法则,ORACLE自动使用基本成本(cost)的优化法则.
注意:
The use of statistically incorrect assumptions when using this feature can lead to incorrect or undesirable results.
这句话不太理解,估计是说采用样本采集特性可能会产生不准确的结果集。
分享到: 上一篇:到上海了
下一篇:成就DBA职业生涯
查看评论
  暂无评论

您还没有登录,请[登录]或[注册]
以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场个人资料
spring_sun1
 
访问:3075次
排名:千里之外
原创:12篇 转载:5篇 译文:0篇 评论:0条 文章搜索    文章分类其它(0)
技术心得(5)
文章存档2009年05月(1)2008年11月(1)2008年10月(3)2008年09月(1)2008年08月(3)2008年07月(4)2007年09月(3)2007年06月(1) 展开
阅读排行Newegg笔试经历 (712)
oracle sample (655)
(转)BI构架及相关技术简介 (429)
(转)OLAP简介 (361)
常用Java技术名词解释汇总 (264)
商业智能项目团队构成 (187)
去西安续 (56)
西安事变及北京之行 (51)
上海之行 (50)
技术培训 (48)
评论排行Newegg笔试经历 (0)
成就DBA职业生涯 (0)
oracle sample (0)
到上海了 (0)
上海之行 (0)
西安事变及北京之行 (0)
绝望 (0)
去西安续 (0)
出差西安事件 (0)
技术培训 (0)
 
公司简介|招贤纳士|广告服务|银行汇款帐号|联系方式|版权声明|法律顾问|问题报告
北京创新乐知信息技术有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
江苏乐知网络技术有限公司 提供商务支持
 Email:webmaster@csdn.net
Copyright ? 1999-2011, CSDN.NET, All Rights Reserved

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26188260/viewspace-708627/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/26188260/viewspace-708627/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值