从100万条数据的表中,随机取出一个id,表中的id可能不连续,除了
select top 1 id from tbl order by newid()
,还有没有更快的方法?
因为要循环执行很多次
因为要虚拟一些数据,要求id尽量不重复,有个别重复的也无所谓.

解决方案 »

  1.   


    --id上建聚集索引
    --然后随机生成1~id最大值之间的一个数字
    declare @id int --你要获取的id
    declare @maxid int   --id最大值
    select @maxid=max(id) from tb
    set @id=ceiling(rand()*@maxid)
    while not exists(select 1 from tb where id=@id)
    begin
        set @id=ceiling(rand()*@maxid)
    end
    print @id
    --PS:也许是馊主意
      

  2.   


    select top 1 id from tbl order by newid()
    --其实个人觉得这个没什么不好,可能就是用不到索引...
      

  3.   

    可以试试这个
    http://tech.ddvip.com/2008-12/1229671304101380.html
      

  4.   

    SELECT TOP 1 ID
    FROM TB TABLESAMPLE SYSTEM (1 PERCENT)多少数据都是浮云
      

  5.   

    只要id列上有索引, select top 1 id from tbl where id=cast(RAND()*1000000 AS int)
      

  6.   

    你一次取多个,在程序循环处理,不就快了吗,比如一次取100个,你循环次数/100
    select top 100 id from tbl order by newid()
      

  7.   

    select top 1 id from tbl order by newid()
      

  8.   

    要取n个,就
    select top @n id from tbl order by newid()
    sql只主要执行一次,利用每一条记录就行了
    肯定不重复