![](https://iknow-base.cdn.bcebos.com/lxb/notice.png)
access sql效率问题
我有一个access数据库,记录很简单,只有2个字段,一个ID(自动编号,无意义),一个INFO(5-40个字节),里面有100万条记录。然后要查看随机100条记录,如何...
我有一个access数据库,记录很简单,只有2个字段,一个ID(自动编号,无意义),一个INFO(5-40个字节),里面有100万条记录。然后要查看随机100条记录,如何通过一次查询获得?
呃,是网站上面,ASP
目前用的就是1L的方法,查100次,但是数据库越来越大,越来越慢,慢是绝对的,尽量取最快的方法吧。
2L可以用吗?等会回去试试
where ID=xx or ID=xxx or ID=xxxx or.....是否比查100次快一些?
不懂其原理,不过我想每条要对比100次,效率应该也不会高 展开
呃,是网站上面,ASP
目前用的就是1L的方法,查100次,但是数据库越来越大,越来越慢,慢是绝对的,尽量取最快的方法吧。
2L可以用吗?等会回去试试
where ID=xx or ID=xxx or ID=xxxx or.....是否比查100次快一些?
不懂其原理,不过我想每条要对比100次,效率应该也不会高 展开
4个回答
展开全部
首先用RND函数从100万个ID中随机抽取100个ID,
dim id(100) , all_id
for i=1 to 100
Randomize
id(i)=cint(rnd*1000000 + 1)
all_id= all_id + "," + id(i)
next
all_id = right(all_id , len(all_id)-1) '去掉最左边的逗号,
最后的SQL就写成:
sql="select * from 表名 where id in(" & all_id & ")"
do while not rs.eof
...........
rs.movenext
loop
说明一下,用以上方法可能会产生重复的ID。
好了,这个方法你不妨也可以试一下啊!
dim id(100) , all_id
for i=1 to 100
Randomize
id(i)=cint(rnd*1000000 + 1)
all_id= all_id + "," + id(i)
next
all_id = right(all_id , len(all_id)-1) '去掉最左边的逗号,
最后的SQL就写成:
sql="select * from 表名 where id in(" & all_id & ")"
do while not rs.eof
...........
rs.movenext
loop
说明一下,用以上方法可能会产生重复的ID。
好了,这个方法你不妨也可以试一下啊!
展开全部
可以用一个随机数 循环100次 每次对应就是那个ID 也就是索引
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
select top 100 * from (SELECT *
FROM test
order by rnd()) as t
FROM test
order by rnd()) as t
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
随机生成一个数i(这个数要小于【总记录数-100】)然后用这个数查询
这样可以只查询一次
1.前提是id是连续的
select * where id between i and i+100
2.id不连续(但可能没有100个)
select top 100 * where id between i and 10000000
忘了,这两种都不能达到随机id的效果,还是只能用楼主说的where ID=xx or ID=xxx or ID=xxxx or.....
这样可以只查询一次
1.前提是id是连续的
select * where id between i and i+100
2.id不连续(但可能没有100个)
select top 100 * where id between i and 10000000
忘了,这两种都不能达到随机id的效果,还是只能用楼主说的where ID=xx or ID=xxx or ID=xxxx or.....
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询