sql server 随机读取数据

 

复制代码
--sql server 随机读取数据

SELECT TOP 1 * FROM [tablename] ORDER BY NEWID()
SELECT * FROM [tablename] where pk in (select top 1 pk from [tablename] ORDER BY NEWID())
--这两个方法都需要排序,因此IO的逻辑读取会比较多,而且CPU占用也多很多
select top 1 * from tbname TABLESAMPLE(XXX rows)
--XXX应该为整数,算法如下:
--按照你表的行大小,计算一个数据页大概装多少行,XXX最少为每页的行数,建议填为2-3倍每页行数
--如果不愿意去算这个数,也可以写成如下形式:
select top 1 * from tbname TABLESAMPLE(0.1 PERCENT)
--由于TABLESAMPLE选项只是读取整页的数据,因此即使是很大很大的表,读取几个页的速度还是很快的
--使用TABLESAMPLE选项,数据库随机取一个或者几个数据页,然后返回结果,不扫描索引,也不做全表扫描,也不排序。
--这个时候不要被执行计划所误导,执行计划写的是Table Scan.
--这个时候SET STATISTICS IO ON,你可以看到只有几个逻辑和物理读取
--结论:最后两种速度快,效率高
复制代码

 

posted @   davidhou  阅读(3627)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示