SQL: 从一个表随机读取一行或几行记录的问题

比如ms sql 2000,随机读取了一行记录:

SELECT TOP 1 * FROM [tablename] ORDER BY NEWID()

遇到的问题是,如果这个表记录不多,比如几十或几百、几千行记录,基本上不用1秒时间就出来了。

但我今天需要从一个几十万行记录的表中随机读取一条记录,读取一次需要3 - 5秒。

这效率有点接受不了。

到网上也搜索了一下,有没有更好的办法,没找到好的办法。

关于这个问题的讨论,CSDN: http://topic.csdn.net/u/20100517/11/e88bbddf-e3dd-49ac-8a57-af52553c60f9.html

2012-01-04

时间: 2024-10-14 14:59:13

SQL: 从一个表随机读取一行或几行记录的问题的相关文章

计算数据库中各个表的数据量和每行记录所占用空间--添加架构信息-读后感及知识整理

参考文章: SQL Server 游标运用:查看一个数据库所有表大小信息(Sizes of All Tables in a Database) 分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间) 监控SQLServer 数据库表每天的空间变化情况 仔细拜读上面三位的文章,不会的知识点又参考了MSDN,巩固了知识点如下: 知识点: 1.表的架构信息,涉及的系统对象 sys.schemas 和 INFORMATION_SCHEMA.TABLES,但后者不是官方推荐方式,

SQL向一个表中批量插入&&删除大量数据

插入: 1. 数据从另一个表中获取 (1)两表结构不一样insert into tb1 需要的列名 select 按照前面写上需要的列名 from tb2(2)两表结构一样insert into tb1 * select * from tb2 2. 数据直接输入 (1) INSERT INTO MyTable(ID,NAME) VALUES(1,'123');INSERT INTO MyTable(ID,NAME) VALUES(2,'456');INSERT INTO MyTable(ID,N

SQL查询一个表中类别字段中Max()最大值对应的记录

问题是: 数据库有一个表 code,里面有个点击量字段click_num和一个类别字段kind以及其它信息字段, 现在要搜出每个类别中点击量最大的那条记录,如果是10个类别,那么结果应该是10条记录, 如果最大点击量有两个相同的只要一条. 经过N次搜索,N次检测网上的解决SQL语句,终于找到个优雅的而且结果正确的SQL,这个是一个博客作者在Mysql的官方文档里面发现的. 禁不住收藏了,以备后用. select id,kind,click_num from code as a where  cl

Java从一个输入流每次读取一行:BufferedReader.readLine()

假设该输入流从一个文件中获取,然后每次读取一行输出,直到读取完毕.用Java IO中的BufferedReader的readLine(),"顾名思义,读取一行"实现: import java.io.BufferedReader; import java.io.FileInputStream; import java.io.InputStream; import java.io.InputStreamReader; public class MainClass { public stat

excel vba 实现跨表单(sheet) 搜索 - 显示搜索行记录搜索历史

前两天,一个朋友问我,有没有办法在excel里实现一个表单里是原始数据,在另一个表单里显示搜索到的行,搜索关键词可用~分隔开,并把搜索历史记录下来? 我想了想,用vba实现肯定可以啊,但是我又在想,有没有可能excel自身的功能就可以实现了呢,但是后来没有发现excel自带这种功能.于是思考自己用vba给实现吧. 于是我打开我的电脑,结果发现我的office版本是wps,根本就没有vba功能,网上说的使用vba模块安装,但是始终没有安装成功.最后放弃了,自己下载一个office2013, 自带v

SQL查询一个表的总记录数的方法

一.简单查询语句 1. 查看表结构 SQL>DESC emp; 2. 查询所有列 SQL>SELECT * FROM emp; 3. 查询指定列 SQL>SELECT empmo, ename, mgr FROM emp; SQL>SELECT DISTINCT mgr FROM emp; 只显示结果不同的项 4. 查询指定行 SQL>SELECT * FROM emp WHERE job='CLERK'; 5. 使用算术表达式 SQL>SELECT ename, sa

sql中将一个表中的id字段所对应的属性值代换

我们平时在编辑sql的表的时候,为了使所写的值不冲突,会给一个属性加上主键,如下图id是主键,id1的意思是小明所对应的人的id号这样我我们再往数据库中加数的时候不会重复.但是我们给读者看的时候要将id1所对应的name值给出来,这时我们可以使用子查询的方式.select SELECT *,id1=(select b.name from test b where a.id1=b.id ) from test as a

sql根据一个表查询的数据作为条件查询另一个表

代码格式如下: select * from BillConsume where obId in (select obId from OpenBills where clearTheMarket is null or clearTheMarket=0) 要注意的是:in后面的查询语句必须是查询一个字段跟前面的表相对应的.比如要根据订单号orderID,OpenBills 这个表就需要查询到orderID这个字段,BillConsume这个表的条件就要判断orderID

SQL 用一个表的数据更新另一张表

用表B的数据(B1列,B2)更新表A的A1,A2列 SQL Server: update A SET A.A1 = b.B1,A.A2=B.A2 FROM A ,B WHERE A.ID1 = B.ID1 and A.ID2 = B.ID2; Access: update A, B set A.A1 = B.B1,A.A2=B.B2 where A.ID1 = B.ID1 and A.ID2 = B.ID2; --或 update A INNER JOIN B ON A.ID1 = B.ID1