首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

关于150E的数据的查形式.

2013-12-28 
关于150E的数据的查方式....本帖最后由 diaodiaop 于 2013-11-26 17:51:53 编辑刚下载了某个通讯软件群的

关于150E的数据的查方式....
本帖最后由 diaodiaop 于 2013-11-26 17:51:53 编辑 刚下载了某个通讯软件群的数据库 有10个 假设他们分别为

“QQGroupDB01”.......“QQGroupDB10”

每个数据库中 有1000个表 分别是

“table0001”........."table10000"

也就是 1W个表  其中他们的结构都一样 假设是


create table table0001
(
id int identity(1,1) primary key,
name varcahr(10),
sex int,
qunnum int,--重要查询条件。
)


现在我要查询qunnum=55441122

首先我不知道在哪个数据库中,也不知道在哪个表中。。

所以 我游标遍历所有的数据库,所有的表,组成一个长达19米的字符串作为

create view db_all
as
select id,name,sex,qunnum from QQGroupDB01.dbo.table0001 union all
select id,name,sex,qunnum from QQGroupDB01.dbo.table0002 union all
... ... ...
select id,name,sex,qunnum from QQGroupDB10.dbo.table1000

后面的东西。

这样 我查询db_all就能找到我想到的了。。

比如


select id,name from db_all where qunnum=445566


 可是实际上。当我操作的时候发现我错了。

根本查询不出来。很慢很慢还是查询不出来。我一看表。每个表的数据 在150W上下

那么一个数据库大概就是15E

所以我这个view的数据 应该在150E左右..

我这只是猜的 因为我


select count(1) from db_all


根本查询不出来。。

有什么解决方案...
[解决办法]
加索引后,再加上点判断吧


然后做个循环

declare @i int, @tableName varchar(10)
while(@i<445566)
{
  select @i=max(qqnum) from table00000
  
  set @tableName =@tableName +1
}



[解决办法]
可能用程序控制起来更好些
[解决办法]
就是查询每个表的最大值,小于你查询的值的话,再去找下一个表
依次循环
当不小于你的查询值的时候,那你要查询的数据就在那个表中了

建立索引后,取一个表的最大值跟查询的值对比,然后判断要找的数据是否在这边表中,
效率远远高于你全部查一遍(即便是用到了索引)
[解决办法]
写个存储过程,一个一个查。

没个单独的表上做好索引即可。 


[解决办法]
引用:
写个存储过程,一个一个查。

没个单独的表上做好索引即可。 


另外,你可以输出是那个库的那个表有这个数据。

[解决办法]
先把数据 合并到一个表中。


1. 群表 应该只有 8千多万。
在 QunNum 建立索引。

2. 群与QQ关系数据 有 14多 E.

 在QQNum, QunNum上建立索引

热点排行