社区
MS-SQL Server
帖子详情
一道简单的面试题,SELECT TOP 1 * FORM TABLE ORDER BY NEWID()
mengnnou
2010-11-26 05:52:06
1 原理是什么,SQL SERVER如何执行这条语句?
2 对于数据量很大的表,该语句性能高么?
3 还有其他方式随机获取表中的一行么?
...全文
531
32
打赏
收藏
一道简单的面试题,SELECT TOP 1 * FORM TABLE ORDER BY NEWID()
1 原理是什么,SQL SERVER如何执行这条语句? 2 对于数据量很大的表,该语句性能高么? 3 还有其他方式随机获取表中的一行么?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
32 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
duanxn
2010-11-27
打赏
举报
回复
很多网站的随机广告显示都是用
SELECT TOP XXX * FORM AD_Table ORDER BY NEWID()
w568412
2010-11-27
打赏
举报
回复
学习了,还真不知道有这个用法哦
claro
2010-11-27
打赏
举报
回复
学习。
dawugui
2010-11-27
打赏
举报
回复
[Quote=引用楼主 mengnnou 的回复:]
1 原理是什么,SQL SERVER如何执行这条语句?
2 对于数据量很大的表,该语句性能高么?
3 还有其他方式随机获取表中的一行么?
[/Quote]
1 原理是什么,SQL SERVER如何执行这条语句?
原理就是每次随机对表数据进行排序,然后取第一条。
2 对于数据量很大的表,该语句性能高么?
不高。
3 还有其他方式随机获取表中的一行么?
目前来说,其他的语句还不如用这句:order by newid()
abuying
2010-11-27
打赏
举报
回复
NEWID ( )
创建 uniqueidentifier 类型的唯一值。
如果未使用 UNIQUE 属性创建聚集索引,数据库引擎将向表自动添加一个 4 字节的 uniqueifier 列。必要时,数据库引擎将向行自动添加一个 uniqueifier 值以使每个键唯一。此列和列值供内部使用,用户不能查看或访问。
heyi10012
2010-11-27
打赏
举报
回复
学习。。。。
hello926
2010-11-27
打赏
举报
回复
[Quote=引用 9 楼 dawugui 的回复:]
引用楼主 mengnnou 的回复:
1 原理是什么,SQL SERVER如何执行这条语句?
2 对于数据量很大的表,该语句性能高么?
3 还有其他方式随机获取表中的一行么?
1 原理是什么,SQL SERVER如何执行这条语句?
原理就是每次随机对表数据进行排序,然后取第一条。
2 对于数据量很大的表,该语句性能高么?
不高。
3 还有其他方式随机获取表中的一行么?
……
[/Quote]
MARK
duanxn
2010-11-27
打赏
举报
回复
如果是SQL2005 以上可以用【row_number over 关键字段】和【Random函数】合用,效果会好得多。
让你望见影子的墙
2010-11-27
打赏
举报
回复
来学习的
mengnnou
2010-11-27
打赏
举报
回复
谢谢,结贴
haoxuea
2010-11-27
打赏
举报
回复
来学习的
guguda2008
2010-11-27
打赏
举报
回复
TABLESAMPLE
用个WHILE循环多判断几次,大表的执行效率肯定是好过NEWID的,另外ORDER BY NEWID也有更好的写法,这种简单的写法是最慢的。
guguda2008
2010-11-27
打赏
举报
回复
[Quote=引用 29 楼 mengnnou 的回复:]
主要是,newid()执行次数,理解上应该是每行一次,但是如何在执行计划里验证这一说法?
[/Quote]
你自己看计划啊,最初扫表的时候只会取所有列,下一个标量计算迭代器里最后会多出一个EX什么的列,那个就是生成的GUID列,然后会按照那个列排序
mengnnou
2010-11-27
打赏
举报
回复
[Quote=引用 23 楼 guguda2008 的回复:]
引用楼主 mengnnou 的回复:
1 原理是什么,SQL SERVER如何执行这条语句?
2 对于数据量很大的表,该语句性能高么?
3 还有其他方式随机获取表中的一行么?
1.在扫描基表时,每一行生成一个GUID列,列名随机,然后按生成的列进行排序取第一行输出。
2.不怎么样
3.如果是数据量超大的表,可以考虑用TABLESAMPLE+逻辑判断
SQL code
IF ……
[/Quote]
TABLESAMPLE方案最好,当然对于数据量小的得判断一下,可能不准确
主要是,newid()执行次数,理解上应该是每行一次,但是如何在执行计划里验证这一说法?
s_111111
2010-11-27
打赏
举报
回复
sql是处理数据用的,如果只是随机这种跟他关系不大的要求,建议:
自己生成一个随机数,然后where条件取这个随机数就好了。
dgzcl
2010-11-27
打赏
举报
回复
菜鸟,不太懂!
fengxiaohan211
2010-11-27
打赏
举报
回复
学习了···
sdyttb
2010-11-27
打赏
举报
回复
9楼的回答12楼的补充就是答案了……
mengnnou
2010-11-27
打赏
举报
回复
[Quote=引用 19 楼 abuying 的回复:]
NEWID ( )
创建 uniqueidentifier 类型的唯一值。
如果未使用 UNIQUE 属性创建聚集索引,数据库引擎将向表自动添加一个 4 字节的 uniqueifier 列。必要时,数据库引擎将向行自动添加一个 uniqueifier 值以使每个键唯一。此列和列值供内部使用,用户不能查看或访问。
[/Quote]
答非所问
mengnnou
2010-11-27
打赏
举报
回复
[Quote=引用 16 楼 duanxn 的回复:]
如果是SQL2005 以上可以用【row_number over 关键字段】和【Random函数】合用,效果会好得多。
[/Quote]
这样差不多,也要排序的
加载更多回复(11)
超实用sql语句
非常实用 不下后悔,word文档格式 总共18页 ...
select
top 5 * from (
select
top 15 * from
table
order
by
id
asc)
table
_别名
order
by
id
desc 技巧篇 - - -- - - - - - - 提升篇- - - - - - - - - - 省略
经典全面的SQL语句大全
select
top 5 * from (
select
top 15 * from
table
order
by
id
asc)
table
_别名
order
by
id
desc 随机选择数据库记录的方法(使用Randomize函数,通过SQL语句实现) 对存储在数据库中的数据来说,随机数特性能给...
经典SQL语句大全
select
top 5 * from (
select
top 15 * from
table
order
by
id
asc)
table
_别名
order
by
id
desc 三、技巧 1、1=1,1=2的使用,在SQL语句组合时用的较多 “where 1=1” 是表示选择全部 “where 1=2”全部不选, 如...
mysql top语句报错_MYSQL经典语句大全——提升篇
MYSQL经典语句大全——提升篇1、说明:复制表(只复制结构,源表名:a ...1(仅用于SQlServer)法二:
SELECT
top 0 * into b from a2、说明:拷贝表(拷贝数据,源表名:a 目标表名:b) (Access可用)insert into b(a, b, c...
常用SQL语句
1、说明:创建数据库 CREATE DATABASE database-name 2、说明:删除数据库 drop database dbname 3、说明:备份sql server --- 创建 备份数据的 device USE master EXEC sp_addumpdevice 'disk', 'testBack'...
MS-SQL Server
34,593
社区成员
254,589
社区内容
发帖
与我相关
我的任务
MS-SQL Server
MS-SQL Server相关内容讨论专区
复制链接
扫一扫
分享
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章