sqlserver随机取记录

2009年03月09日 星期一 下午 06:03

SqlServer本身并没有提供随机读取记录的功能,但我们可以通过一些方法来实现这个目的。本文介绍了其中几种方法并比较了各自的优劣。

方法一:

直接通过Sql语句实现,如:

select top n * from tableA order by newid()

这是最简单的方法,通过调用SqlServer的newid()函数(产生GUID—全局唯一标志符)来产生随机记录。

采用这种方法时,需要将表中所有记录与newid()生成的值进行比较从而进行排序。因此,如果表中的记录较多,操作会非常缓慢。

方法二:

假设表中有一个自增长主键,增量为1。这时我们可以这样处理,取出主键的边界值(最大值和最小值),然后通过一个算法得到介于(包括)两个边界之间的随机值,最后按照这个值取出对应记录。下面是C#的例子:

//生成随机数Random rand = new Random();int num = rand.Next(MinVal,MaxVal + 1); //MinVal为主键的最小值,MaxVal为主键的最大值//读取记录的Sql字符串string SqlStr = "select * from tableA where PK = " + num;

这种方法较前一种方法的操作速度有了较大提高(特别是在大数据量的情况下)。但只有当主键值是连续的,中间没有断开的情况,并且增量为1时才能用这种方法。那么,如何才能解决这个问题呢?请继续往下看。

方法三:

对方法二进行了改进。主要思路是,将表中所有的主键值读进一个数组,从数组中随机读出一个值,按照这个值取出对应记录。下面是C#的例子:

//将主键值读进ArrayListArrayList DataIndex = new ArrayList();while (sdr.Read()) //sdr为存放所有主键值的SqlDataReader{DataIndex.Add(sdr[0]); //存入ArrayList}//从ArrayList中随机读取数据项Random rand = new Random();int num = Convert.ToInt32(DataIndex[rand.Next(DataIndex.Length)]);//读取记录的Sql字符串string SqlStr = "select * from tableA where PK = " + num;

这样不管主键是否为自增长字段,也不管数值是否连续,都能够应付自如了。经过笔者的测试,在数据量为50万的情况下代码运行速度几乎没有受到什么影响,可见ArrayList的操作性能是可以信赖的。

转载于:https://www.cnblogs.com/swtseaman/archive/2011/04/28/2031572.html

sqlserver随机取记录相关推荐

  1. 随机取若干条记录的SQL语句

    原文:随机取若干条记录的SQL语句 MySql中随机提取数据库N条记录 select * from TableName order by rand() limit N SQLServer中随机提取数据 ...

  2. php mysql随机记录_php随机取mysql记录方法小结

    这篇文章主要介绍了php随机取mysql记录方法,实例分析了几种常见的随机获取mysql数据的方法,是非常实用的技巧,具有一定的参考借鉴价值,需要的朋友可以参考下 本文实例总结了php随机取mysql ...

  3. lamda表达式 随机取数据的方法

    随机取数据,关键要用到Guid.NewGuid()才可以的,Take(10)表示随机取10条记录 var _icpics = DB.I_FirstRecommend.GetAllList().Wher ...

  4. sqlserver 抓取所有执行语句 SQL语句分析 死锁 抓取

    sqlserver 抓取所有执行语句 SQL语句分析 死锁 抓取 原文:sqlserver 抓取所有执行语句 SQL语句分析 死锁 抓取 在多人开发中最头疼的是人少事多没有时间进行codereview ...

  5. 在几何图形中均匀随机取点算法总结及Delaunay三角剖分算法介绍

    在工作中遇到一个需求,需要在圆形 矩形,三角形内随机,尽量均匀取点作为位置信息,但是random得到的信息有时候不是很满意. 这里讨论一下 第一种错误思路: 根据圆的解析式 (假设圆心在原点)我们可以 ...

  6. mysql 随机取几万数据,mysql随机取数据的几种方法

    摘要 腾兴网为您分享:mysql随机取数据的几种方法,周公解梦,小t智联,图乐,千题库等软件知识,以及2018酷狗音乐vip,集装箱之家,兄弟3150驱动,听书,熊猫办公,四年级上册语文书,winma ...

  7. 等概率随机取数算法的几种实现(洗牌算法)

    等概率随机取数算法的几种实现 最近读了项目中的工具脚本,发现一个随机取数的函数,功能大概是从M个数中不重复的随机取出N个数,算是数组随机排序然后取前N个值的变种. 脚本实现采取原始的方法,每随机取一个 ...

  8. java map随机取值_HashMap随机取值和迭代器取值的对比

    一共四中方法,前两种是迭代器取值,后两种是随机取值,循环了5000万次,时间分别为:迭代器读取的速度大约是随机读取的速度的1.5倍,数据量越大,差距越明显. 另外,插入是读取的100倍左右的时间(这个 ...

  9. 解释一下SQLSERVER事务日志记录

    解释一下SQLSERVER事务日志记录 大家知道在完整恢复模式下,SQLSERVER会记录每个事务所做的操作,这些记录会存储在事务日志里,有些软件会利用事务日志来读取 操作记录恢复数据,例如:log ...

最新文章

  1. Go语言的错误异常处理机制及其应用
  2. 通过异或运算符加密解密 难度二星
  3. [SCOI2010]生成字符串
  4. SQL中的三大常用字符
  5. XAML 布局StackPanel
  6. 2015 DevOps状态调查报告
  7. 商品表有哪些字段_面试中有哪些经典的数据库问题?
  8. python【进阶】5.一等函数(注销)
  9. python建立考试系统_python搭建自动化测试环境
  10. CSS样式(三) - div盒子
  11. 兄弟连Linux ppt笔记
  12. 辽宁电信TY12008-Z_智能机顶盒2.0_S905MB_线刷固件包
  13. IT行业都有哪些职位,初学者如何选择才能够快速进入这个行业?
  14. Adjoint of SE(3)
  15. php linux 一键部署工具,Linux一键配置工具ezhttp介绍
  16. 基于51单片机的蓝牙小车制作【新手向
  17. win10 的 PS 不能直接拖进文件的解决方法(附:与 Edge 登录的冲突)
  18. 编辑器\编译器\IDE
  19. 如何安排自己大学阶段的学习才能成为一名优秀的 Quant?
  20. Wrong namespace. Expected 'cn.itheima.dao.CustomerMapping' 错误

热门文章

  1. 真的凉了!熊猫直播宣布停服:主站流浪计划第一阶段开启
  2. Facebook去年从中国获50亿美元广告收入 占营收10%
  3. Cmake参数详细介绍
  4. 合并两个有序链表 java_合并两个有序链表
  5. python遍历文件_python3 遍历文件夹目录所有文件
  6. 【flink】RocksDB介绍以及Flink对RocksDB的支持
  7. 【kafka】FLink kafka Unable to retrieve any partitions with KafkaTopicsDescriptor: Fixed Topics
  8. 【Java】String hashCode 这个数字 31
  9. 【Flink】did not rea ct to cancelling signal for 30 seconds, but is stuck No implementation was bound
  10. 95-190-300-源码-window-Window Assigner