首页 新闻 会员 周边

sql server索引问题?

0
悬赏园豆:10 [已关闭问题] 关闭于 2012-05-06 19:38

需要解决的问题:公司有个数据库A,里面有1200万条数据,其中有200万条是重复的。我想将这个数据库中的数据导到另一个数据库B中,但去掉重复的。
两个数据库的字段都为:ID(主键),file1(像枚举一样有200个左右值,可以重复),file2(不能有重复的值)。
思路:通过ado.net从数据库A循环取出每一条数据,然后判断B中是否有相同的数据了,如果没有插入,否则不插入。
性能问题:当数据库B中的数据少时性能还可以,但当数据量在10万以上查询是否已经有和file2字段一样的值得速度就慢下来了。请问我应该怎样设置数据库B上的索引和写个什么样的查询语句判断数据是否存在?并且以后在实际生产环境中会一直使用数据库B,几乎每秒都在进行查询file2字段是否已经存在相同的值,如果没有相同的值就插入新数据行的操作.

ps:我不是想问怎样导数据,我是想问在这种情况下应该建立什么索引,我目前在file2这个字段上建了个非聚集索引,整个表没有聚集索引。判断有没有重复的数据的sql语句为:select id from table2 where file2 = @file2

时间都去哪了的主页 时间都去哪了 | 初学一级 | 园豆:51
提问于:2012-04-28 17:50
< >
分享
所有回答(5)
0

直接select 数据库A的数据 用group by 不就去重了吗?

死白的man | 园豆:2135 (老鸟四级) | 2012-04-28 20:11
0
--索引创建
Create index idx_file2 on TestTable(file2)
Go
--判断语句
IF EXISTS(SELECT 1 FROM TestTable WHERE  file2='XXXX')
BEGIN 
   --不插入
   select '不插入'
END ELSE
BEGIN 
   --不插CODE
   select '插入'
END
小材小用 | 园豆:639 (小虾三级) | 2012-04-28 20:19

我是想问下在数据库B上应该建立什么索引?是在file2上建立聚集索引?还是在file2上建立非聚集索引?还是为了防止在file2上建立聚集索引后频繁插入数据来减小聚集索引的填充因子?

支持(0) 反对(0) 时间都去哪了 | 园豆:51 (初学一级) | 2012-04-28 21:07

@勇攀高峰: 建立非聚集索引。不论建立什么索引总会产生碎片,定期重建索引即可。

支持(0) 反对(0) 小材小用 | 园豆:639 (小虾三级) | 2012-04-29 12:10
0
邀月 | 园豆:25475 (高人七级) | 2012-04-29 00:24
0

可以尝试一下这个思路。

首先,从A库检索出需要插入的数据。直接通过两个数据库表关联(file2)或者再加上file1,帅选出需要增加的数据。

最后,select  into即可。

lucika.zh | 园豆:62 (初学一级) | 2012-04-29 08:12
0

先把数据整体读入内存的一个对象中,如LIst集合,然后在用linq循环其中的每一条。

不要每次都从数据库中查询单条数据再做比对,sql语句可以加lock,加快查询速度

dreamhappy | 园豆:4 (初学一级) | 2012-04-29 22:07
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册