高效 SQL @宏哥

铂金苍鹰 发布于 2012/02/26 20:45
阅读 1K+
收藏 1

功能: 需要实现从一个"账号"数据表中随机取出一条账号(username,password)的功能,已经取过的账号不可以在下次再次取到

现在的方法是

建两个表,一个是账号表a, 一个是存放已经取过的账号表b

我写的语句是

select top 1 username,password,NewID() as Random from a where username not in (select username from b) order by Random

insert into b(username,password) values('XXX','XXX')

效率非常低,几十万账号的表就很慢,求教优化为高效SQL语句

加载中
1
皮总
皮总
为何不在程序里面随机一个 id , 程序搞个随机数应该又简单又快的 ..
0
鉴客
鉴客

这样的表结构设计程序是省事了,可再怎么优化也收效不大吧。

0
宏哥
宏哥

引用来自“龙崽”的答案

Minus/Except 语句.只对RDBMS有效.应该可以提高100倍速度,如果数据量大的情况下.
0
HuiDate
HuiDate
要不帐号表a按字母之类拆分多个分视图,然后随机选择某个分视图,随机视图中随机选取帐号。是傻了些~
0
r
riddick
select top 1 a.username, a.password, a.NewID() as Random from a where not exists (select b.username from b where b.username = a.username) order by Random
0
r
riddick
select top 1 a.username, a.password, a.NewID() as Random from a where a.username in  (select a1.username from a1 minus select b.username from b) order by a.Random
0
喜之郎
喜之郎
我今天也遇到了这样的需求,我们用的是Lotus基于文档的数据库,相当于NoSQL了,这种数据库中大集合的操作真的很耗性能。 。我想要从根本上解决这个问题那就是换换解决问题的思路了。我们假设开始有大量没有用过记录在a表中,每从a表中取出一个记录用过之后,将此记录从a表中删除,并添加到b表中。这样保证了记录不会重复用到,也不需要这种集合操作了。
返回顶部
顶部