不要用newid() 这种方式,扫描全表,我的表大,很慢。用这种方式:
SELECT TOP 10 *
FROM TB1
WHERE (id > CAST(FLOOR(RAND() *
(SELECT COUNT(id)
FROM [TB1])) AS int))效果不行,如果两次查询间隔很近,查询的结果十之八九是相同的,还有什么好办法吗?要兼顾执行效率。
SELECT TOP 10 *
FROM TB1
WHERE (id > CAST(FLOOR(RAND() *
(SELECT COUNT(id)
FROM [TB1])) AS int))效果不行,如果两次查询间隔很近,查询的结果十之八九是相同的,还有什么好办法吗?要兼顾执行效率。
解决方案 »
- LIKE 查询的问题
- 如何用一个select语句列出某个用户或角色所具有的权限?
- 求助触发器一个(判断插入信息来调整表中信息),难难.......请给予支持!
- 安装SQL SERVER的report功能报错
- 安装sp3,运行chs_sql2ksp3.exe,却弹出个错误提示框,怪事!框里的信息如下:
- 求教:如何能令一列(C列)的值默认为“C=A列*B列”??
- 一个关于替代游标的问题
- 在SQL SERVER 中,如何通过SQL语句来创建数据库用户并设置权限?
- 入WTO后,中国管理软件方面可能回需求很大,讨论吧!!
- 这种情况数据库应该怎么设计最佳?
- sql语句怎样统计一个月中不同日期的总次数?
- insert 本表的累计数
FROM TB1
WHERE id > ABS(CHECKSUM(NEWID()) )
如果只是需要一些样本,可以使用TableSample来限制结果集select * from dbo.User_Core tablesample system(10 rows)
select * from dbo.User_Core tablesample system(10 percent)select top 1 * from dbo.User_Core tablesample system(100 rows)
select top 1 * from dbo.User_Core tablesample system(100 percent)percent是表数据页的百分比,而不是记录数的百分比,因此记录数目是不确定的
row 也是大约行数具体请参见联机帮助
/* --摘抄至联机帮助
如果确实需要单个行的随机抽样,则应修改查询以随机筛选出行,而不是使用 TABLESAMPLE。
例如,以下查询使用 NEWID 函数返回 Sales.SalesOrderDetail 表的大约百分之一的行:SELECT * FROM Sales.SalesOrderDetail
WHERE 0.01 >= CAST(CHECKSUM(NEWID(), SalesOrderID) & 0x7fffffff AS float)/ CAST (0x7fffffff AS int) SalesOrderID 列包括在 CHECKSUM 表达式中,从而 NEWID() 每次计算一行以获取每行抽样。表达式 CAST(CHECKSUM(NEWID(), SalesOrderID) & 0x7fffffff AS float / CAST (0x7fffffff AS int) 的计算结果为介于 0 和 1 之间的随机 float 值。
*/