挑战大富翁!!!!!!!!!!! (300分)

  • 主题发起人 主题发起人 wzs
  • 开始时间 开始时间
连GUID是128位的都不知道还在这挑战富翁。
32位? 用脑子想想吧, 32位无类型整数只有40多忆, 还没地球人口多, 怎莫可能是全世界唯一的?
 
to wzs,我是个新手,特别是数据库方面。但是我认为在实现上,这是一个很容易处理的问题。
1.在表的主键范围内取一个随机数 tmpID。
2.select top 1 * from table1 where 主键 >= tmpID
3.在我工作近一年的经历里,我见过很多记录量很大的表,通常都会有个具有一定意义的主键。
eg。使用时间作主键, 使用一个某个表约定的渐增数作主键, 。。。
以时间为例,如果我们的业务操作的时间是:从1998年1月1日 至 今,
我们要在delphi中取得一个随机的 >= 1998年1月1日 <= 今天 的TmpID 应该很容易。
所以: 如果你同意这个观点请给分。:)
 
to 悟空1: 在实际的操作中,我们也发现ORDER BY 不一定会令查询的速度减慢,
相反,我的体会是可以加快查询速度。
以前我曾到社保局数据中心试过:
select Count(*) from table order by 主键

select Count(*) from table
快了差不多10倍,(数据库为oracle ,数据量为差不多20万)。
至于其中的缘由,我不知道,也很想知道。:)^_^
 
128位 与 32位
嘻嘻,此位非彼位
 
高手斗法好玩
又能学东西
 
感觉你们是在讨论回字有几种写法:)
 
select top 1 * from table order by NewID()
有何不好 ?
天真 :
SELECT *
FROM dbo.f
WHERE (ID = CAST(RAND() * 10000 AS int))
有何不对 ?
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=986051
 
还未结束啊
不如不要用什么数据库了
直接硬盘存取得了
几个随机数就搞定了
备分数据可能还简单点
 
top效率很低 打架仔细测试就知道了
用limit
 
[red]好好玩,就像江湖侠客在比试,只等那隐去的高手来评理!!
而我,哈哈,只能做观看的过客啦![/red]
 
有许多人说java特慢,但用的人却越来越多。
 
穿越沦陷的爱,
你看看你的数据库表中有多少条记录啊
如果只有四条
SELECT *
FROM dbo.f
WHERE (ID = CAST(RAND() * 4 AS int))
呵呵,这条语句不很通用的:)
你得理解他的意思
 
我觉得用Rand() 来取是可行的,也是高效的,具体怎么用应该按照需要
select top 1 * from table order by NewID()
这个很通用,而且也觉得挺好,并没有效率上多大的牺牲,一直在用
 
接受挑战!不会
 
(*(*^*^$^%()&amp;()*&amp;&amp;%&amp;thorn;?!
 
wzs ? ,是不是我要找的吴正松?
发个mail给我,太多问题要问你了.[:D]
jihengxinxin@sina.com
我是国隆的季珩
 
怎么回事?这个问题又被提前了?! 斑竹何在?
根据楼主的原题(http://www.delphibbs.com/delphibbs/dispq.asp?lid=971277):
>>怎样构造 随机取一条记录的SQL语句
>>SQL只能返回一条记录!!!
>>且每次记录不能重复!!!!
相信大家可以从这短短的N行中看出M个逻辑以及概念错误。
什么是“随机”?——真随机?伪随机?怎么随机?
“每次...不能重复”!?——设一张表有N条记录,在“随机”取M次记录的情况下,
可能做到“每次都不重复”吗?如果说只取一次,那肯定不会重复——Top1即可满足题意。
如果要取多次,并且不能重复——如果不允许在抽取的过程中更新数据库的话——我只能将
关键字段取回本地,然后用“不重复随机取数”算法进行抽取——很遗憾,为了满足楼主的
要求,我不能依靠SQL技巧了。

强烈要求尽快结贴。
 

Similar threads

后退
顶部