从100万条数据的表中,随机取出一个id,怎样更快

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

11 个解决方案

#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


新增一个连续的列,加好索引。《-----这个是一次性的工作
然后通过随机数获取那个不连续的id。

#5


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

#6


为何不找另外一列排序?

#7


SELECT TOP 1 ID
FROM TB TABLESAMPLE SYSTEM (1 PERCENT)


多少数据都是浮云

#8


只要id列上有索引,

 select top 1 id from tbl where id=cast(RAND()*1000000 AS int)

#9


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

#10


select top 1 id from tbl order by newid()

#11


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

#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


新增一个连续的列,加好索引。《-----这个是一次性的工作
然后通过随机数获取那个不连续的id。

#4


#5


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

#6


为何不找另外一列排序?

#7


SELECT TOP 1 ID
FROM TB TABLESAMPLE SYSTEM (1 PERCENT)


多少数据都是浮云

#8


只要id列上有索引,

 select top 1 id from tbl where id=cast(RAND()*1000000 AS int)

#9


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

#10


select top 1 id from tbl order by newid()

#11


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