| 
                     | 
                    
                        主题:  怎样不使用newid()随机去取出一条记录?
                     | 
                
            
                        
                
                    
                          GHL 
                        职务:普通成员 
                        等级:1 
                        金币:0.0 
                        发贴:15 
                        注册:2004/4/27 22:49:08 
                     | 
                    
                        
                            
                            #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 
                        注册:2001/12/20 15:57:57 
                     | 
                    
                        
                            
                            #22004/10/24 20:03:12 
                            
                                不知有没有随机函数,我想全部选出到数据集后,再用编程随机抽取更好些,而且更灵活。
                                
                                
                                
                             
                            
                            非常大鱼 
                         
                     | 
                
                        
                
                    
                          蓝鲸 
                        职务:版主 
                        等级:5 
                        金币:42.1 
                        发贴:2614 
                        注册:2001/12/20 15:57:57 
                     | 
                    
                        
                            
                            #32004/10/30 10:35:28 
                            
                                排序方法: SELECT * FROM Northwind ORDER BY NEWID()  取一条用 TOP 1就行了
                                
                                
                                
                             
                            
                            非常大鱼 
                         
                     | 
                
                        
                
                    
                          GHL 
                        职务:普通成员 
                        等级:1 
                        金币:0.0 
                        发贴:15 
                        注册:2004/4/27 22:49:08 
                     | 
                    
                        
                            
                            #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 
                        注册:2001/12/20 15:57:57 
                     | 
                    
                        
                            
                            #52004/10/30 10:55:05 
                            
                                多谢ghl,学了一招。 看来newid还是较耗时的。 近来我也在想这个,比如服务器数据库用SQL SERVER,而轻便型的客户应用程序用ACCESS,但ACCESS不支持这NEWID。如果想把客户端的数据导入到SQL SERVER上去,又要保持各表ID号之间连接的完整性,又什么好的办法。
                                
                                
                                
                             
                            
                            非常大鱼 
                         
                     |