|
主题: 怎样不使用newid()随机去取出一条记录?
|
GHL
职务:普通成员
等级:1
金币:0.0
发贴:15
|
#12004/10/24 14:08:02
数据库使用的是MSSQL,我想在符合一些条件(比如price>3)的记录中随机取出一条。 select top 1 title from [abc] where price>3 order by newid() 上面的执行速度不怎么好,有没有更快的方法呢?
|
蓝鲸
职务:版主
等级:5
金币:42.1
发贴:2614
|
#22004/10/24 20:03:12
不知有没有随机函数,我想全部选出到数据集后,再用编程随机抽取更好些,而且更灵活。
非常大鱼
|
蓝鲸
职务:版主
等级:5
金币:42.1
发贴:2614
|
#32004/10/30 10:35:28
排序方法: SELECT * FROM Northwind ORDER BY NEWID() 取一条用 TOP 1就行了
非常大鱼
|
GHL
职务:普通成员
等级:1
金币:0.0
发贴:15
|
#42004/10/30 10:43:45
上次看到一篇文章,就拿来试了一下,好像比newid()快一些
Dim rndMax,rndNumber rndMax = conn.execute("select count(id) from [abc] where price>1")(0) randomize timer rndNumber = int(rnd*rndMax) Set rs = Conn.execute("select title from [abc] where price>1") rs.Move rndNumber title = rs(0) rs.close
在同样的记录数,newid排序耗130~140ms,上面的方法耗30~80ms。。。
|
蓝鲸
职务:版主
等级:5
金币:42.1
发贴:2614
|
#52004/10/30 10:55:05
多谢ghl,学了一招。 看来newid还是较耗时的。 近来我也在想这个,比如服务器数据库用SQL SERVER,而轻便型的客户应用程序用ACCESS,但ACCESS不支持这NEWID。如果想把客户端的数据导入到SQL SERVER上去,又要保持各表ID号之间连接的完整性,又什么好的办法。
非常大鱼
|