业务逻辑是这样的:1.从数据中的Table1中读取数据到应用程序,对nvarchar字段做一些处理,Table1有4千万条记录,每次读入应用程序大概读取1万条,对这1万条记录处理后,在应用程序中得到4~5倍的记录,也就是4~5万条;2.将应用程序中处理后的记录写回数据库的Table2,需要将应用程序中的nvarchar字段写入Table2,但是在写之前需要做判断,如果Table2中有这条记录,就不写入;另外还需要将该nvarchar对应的一个uniqueidentifier字段一并写入Table2,nvarchar与uniqueidentifier组成一条完整的记录。 关键是uniqueidentifier来自Table3,但是对Table3做一次查询,需要6~7分钟(Table3表很大)。因为 写入数据库之前需要判断是否有重复的记录,所以我现在的策略是 对应用程序中的数据逐条判断,因此在Table3中取uniqueidentifier也是逐条读取的,所以造成时间开销很大,我的数据源有4千万记录,这样做的话从理论上说是根本没法完成的。现在请教各位,有什么好的策略来完成这样一项工作呢。
解决方案 »
- 在线求一SQL语句,马上结贴。
- 两个表的查询问题
- 如何让SQL数据库每月的1号自动向其中一个表插入若干条记录?
- sql注册程序集(无法安装程序集***,因为现有策略阻止使用它。)
- 今天和SQL语句干上了,在线等!
- 在给存储过程传参数时(其中一个参数声明为nvarchar,值假设为'1,2,3'),在where条件后报错,不知道如何转换~
- sql 2005中的insert句字段前面加上N是什么意思
- 一个可影响我公司四十多家门店正常运行的问题
- 大型数据集合怎么实现异步获取? (定给100分)
- 在windowxp 下安装sqlserver2000企业版,装不上是何问题?
- 继续数据查询,头大!
- 如何查询一个字段名在那些表里有
我个人建议,用某种开发语言自己提取相关数据,然后用循环逐一判断,然后写入表中.这么大的数据量,估计直接用SQL写会造成内存等的崩溃.
给table3加索引,提高查询效率。查一个记录就6/7分钟,也太恐怖了点
2:为表建立索引(主要是要用来查询的表)
3:如果可以,添加也放在存储过程。
就是用存储过程来完成添加,也完成从table3表中。我有如下经历,供你参考:
1:有个历史纪录表,该表有个nvarchar字段,里面存放的是历史操作,有一定的格式。
2:该表一个id字段。
3:该表有个createdatetime字段。
4:有个字段是放物料编号的。
5:物料表有上千万。历史记录表也有2千多万。
我要做的事情是,从历史操作中分析某段时间的某个物料的所有进仓数量明细。我提升性能做法是:
将根据时间查询历史记录表的记录放到临时表中。
然后所有操作都根据临时表来操作。
扩展开来:对数据量大的表,都先根据一定的条件,放到另外一个表中,然后在做操作,就是大表化为小表来操作。
因为sql语句中,查询的过程就是遍历整个表的过程,如果我能事先将不要查询的记录剔除,就可以提高速度。
当然,这是数据量很大的情况。
我经过改善后,对历史记录的查询效率整整提高了70%以上。