如何提高性能SELECT TOP n * FROM [tablename] ORDER BY NEWID()

loncyaygc 2010-05-17 11:24:55
加精
想从数据库随机获得一条记录
在网上查了一下全都是这个方法
但性能太差 千万级的表要20秒以上
如何提高性能
SELECT TOP 1 * FROM [tablename] ORDER BY NEWID()
...全文
11099 274 打赏 收藏 转发到动态 举报
写回复
用AI写文章
274 条回复
切换为时间正序
请发表友善的回复…
发表回复
qddoit 2012-10-11
  • 打赏
  • 举报
回复
3楼的好用,高人~
wjlsmail 2010-07-19
  • 打赏
  • 举报
回复
1、先用 random() 族函数取id的随机数;
2、再按id取记录。(id字段有索引。)
linguangfei2007 2010-07-19
  • 打赏
  • 举报
回复
路过,路过,学习
华芸智森 2010-07-19
  • 打赏
  • 举报
回复

DECLARE @TMPTABLE TABLE ( ID INT NOT NULL)
DECLARE @IntID INT;
DECLARE @IntRowCount INT;

SET @IntID=0
SELECT @IntRowCount=COUNT(*) FROM Pro_PriceSet
WHILE @IntID<=5 BEGIN
INSERT INTO @TMPTABLE VALUES(RAND()* @IntRowCount)
SET @IntID=@IntID+1
END

SELECT * FROM (
SELECT ROW_NUMBER() OVER (ORDER BY ProNum) AS RowNumber,* FROM Pro_PriceSet
) AS T WHERE RowNumber IN (SELECT TOP 5 ID FROM @TMPTABLE ORDER BY ID)

SELECT * FROM (
SELECT ROW_NUMBER() OVER (ORDER BY ProNum) AS RowNumber,* FROM Pro_PriceSet
) AS T WHERE RowNumber IN (SELECT TOP 5 ID FROM @TMPTABLE ORDER BY ID)

华芸智森 2010-07-19
  • 打赏
  • 举报
回复
DECLARE @TMPTABLE TABLE ( ID INT)
DECLARE @IntID INT;
DECLARE @IntRowCount INT;

SET @IntID=0
SELECT @IntRowCount=COUNT(*) FROM Tablename
WHILE @IntID<=5 BEGIN
INSERT INTO @TMPTABLE VALUES(RAND()* @IntRowCount)
SET @IntID=@IntID+1
END

SELECT * FROM (
SELECT ROW_NUMBER() OVER (ORDER BY 主键) AS RowNumber,* FROM Pro_Tablename
) AS T WHERE RowNumber IN (SELECT ID FROM @TMPTABLE)
HsuChine 2010-07-19
  • 打赏
  • 举报
回复
学习 看各位高手解答
Jermaine 2010-07-18
  • 打赏
  • 举报
回复
如果不想对全表进行顺序扫描的话,也可以对num_value做index以后执行下列语句,注意如果有index的话,查询max是constant time。


SELECT * FROM table
WHERE num_value >= RAND() * (SELECT MAX(num_value) FROM table)
LIMIT 1;
Jermaine 2010-07-18
  • 打赏
  • 举报
回复

SELECT column FROM
( SELECT column FROM table
ORDER BY dbms_random.value )
WHERE rownum = 1

w360826 2010-07-18
  • 打赏
  • 举报
回复
貌似这东西不错
程序园苑 2010-07-18
  • 打赏
  • 举报
回复
luguo,学习
ycl1314 2010-07-17
  • 打赏
  • 举报
回复
每天回帖即可获得10分可用分!小技巧:教您如何更快获得可用分
yeehu1984 2010-07-17
  • 打赏
  • 举报
回复
悲剧,现在还不懂聚集索引是什么,哪位大侠顺便说下啊
hfrll 2010-07-16
  • 打赏
  • 举报
回复
.........................
情殇无限 2010-07-16
  • 打赏
  • 举报
回复
再来顶下
w_head 2010-07-16
  • 打赏
  • 举报
回复
,,,,,,,,,
jackingod 2010-07-16
  • 打赏
  • 举报
回复
强帖, 顶上去。
Andy-Xiejf 2010-07-16
  • 打赏
  • 举报
回复
学习... O(∩_∩)O哈哈~
dkmuss 2010-07-16
  • 打赏
  • 举报
回复
学习 研究用用
解释多余的 2010-07-16
  • 打赏
  • 举报
回复
路过,学习了
soyaku 2010-07-16
  • 打赏
  • 举报
回复
学习 中
加载更多回复(247)

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧