CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  数据库(包含打印,安装,报表)

有关于提高数据库存取效率的问题。高手请指教,新手请欣赏!

楼主fhvsbgmy(地球火星人)2005-07-04 19:30:29 在 VB / 数据库(包含打印,安装,报表) 提问

我需要在一个项目中对SQLserver数据库进行大量的读写操作。  
  例如:要随即生成10000个号码插入数据库,我用以下代码实现,但是效率超低,耗时超长!!!  
  后来加入了临时表(如下:)但也没有提高效率,不知道错在哪里,请高手指教!!!!分不够再加!急! 问题点数:100、回复次数:7Top

1 楼hdhai9451(☆新人类☆)回复于 2005-07-04 20:30:16 得分 10

用下面的方法生成是最快的  
   
  select   top   10000   id=identity(int,1,1),item='OK',num=null  
  into   #tt  
  from   syscolumns   a   ,sysobjects  
   
  #tt是臨時表  
   
  select   *   from   #tt  
  Top

2 楼zlt982001(乐天)回复于 2005-07-04 23:00:57 得分 10

你原来的代码没贴,怎么看  
  一般如果直接用   Insert   语句   插入慢的化,与索引太多或数据字段太多有关系  
  与临时表没有太大关系Top

3 楼haipingma(今天你过得快乐吗?)回复于 2005-07-05 09:05:39 得分 0

用insert   into   10000條數據應該不會慢  
  你貼出來看看Top

4 楼fhvsbgmy(地球火星人)回复于 2005-07-05 10:38:23 得分 0

不好意思。。。。。忘记贴代码了  
  ……  
  count=10000  
  weishu   =   15  
  ‘con   是当前连接的sql活动连接  
   
  con.execute   “select   *   into   #table1   from   table2”   ‘table2   是我最终要的实际表  
  rundomize  
   
  do   while   count>0  
          x=(#9000000000   *   rnd   +#1000000000   *   rnd)$   &   (#9000000000   *   rnd   +   #1000000000   *   rnd   )$  
          x=left(x,0,weishu)  
          set   rs=con.execute   “select   *   from   #table1   where   key=’”   &   x   &   “’”  
          if   rs.eof   then  
                con.execute   “insert   into   #table1(key,dates)   values(‘”   &   x   &”’,’”   &   datetime.now   &   “’)”  
                  count=count-1  
          end   if  
  loop  
   
  con.execute   “drop   index   table2.ikey”  
   
  con.execute   “insert   into   table2   select   *   from   #table1”  
   
  con.execute   “creat   index   ikey   on   table2(key)”  
  ……  
  ‘   大概就是这个样子,代码在家里,来公司没带。主要就是这个结构,至于妹一句的语法可能不太对,但是保证原来的代码运行没有问题。小弟是刚刚开始做数据库的这个部分。。。。什么都不太熟悉。。。。请大家多多帮助!!!!!  
  Top

5 楼haipingma(今天你过得快乐吗?)回复于 2005-07-05 13:56:01 得分 0

你用循環插入怎麼能快,要用批次插入啊  
  Top

6 楼fhvsbgmy(地球火星人)回复于 2005-07-05 15:03:23 得分 0

怎么批次插入啊!。。。。。。。。。Top

7 楼zlt982001(乐天)回复于 2005-07-05 22:02:16 得分 80

很以用以下方式  
  方法1:  
   
  使用事务        
  cn.BeginTrans   '开头  
  cn.CommitTrans   '成功结束  
  cn.RollbackTrans     '错误回滚  
  事务的好处是有错误处理,不会插入一半出错,另外也可以提高一点速度,因为是批量提交的  
  结合优化下面优化的语句,可以提高一些速度  
   
  1.避免使用Double(#)数据类型,可以使用Long   ,来生成随机数  
  2.set   rs=con.execute   “select   *   from   #table1   where   key=’”   &   x   &   “’”  
  改为   :     if   con.execute(“select   Count(*)   from   #table1   where   key=’”   &   x   &   “’”)(0)>0    
  3.插入语句:  
  con.execute   “insert   into   #table1(key,dates)   values(‘”   &   x   &”’,’”   &   datetime.now   &   “’)”  
  加上参数  
  con.execute   “insert   into   #table1(key,dates)   values(‘”   &   x   &”’,’”   &   datetime.now   &   “’)”,   ,   adExecuteNoRecords  
   
   
  方法2:   利用存储过程  
   
  应该是提速最高的方法   ,你上面的语句完全可以写在存储过程中  
   
   
   
   
  Top

相关问题

  • 数据库存取问题
  • 数据库存取文件???!!!
  • 数据库存取问题
  • 如何存取数据库图片呢?
  • 怎样用数据库存取图片?
  • 从数据库中存取图片,
  • 数据库存取JPG的问题
  • 数据库存取图片问题!!
  • 数据库存取大文本
  • 关于数据库存取的问题

关键词

  • 数据库
  • 代码
  • 语句
  • 插入
  • con
  • 效率
  • rnd
  • 提高
  • execute
  • 生成

得分解答快速导航

  • 帖主:fhvsbgmy
  • hdhai9451
  • zlt982001
  • zlt982001

相关链接

  • Visual Basic类图书
  • Visual Basic类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo