CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  其他数据库开发 >  Sybase

sybase数据库表,有一个字段为3位的数字,现在想把它全部改为4位。注:unix服务器,远程登录修改,且此表有100万条以上的纪录。最好的方

楼主echo7410(hgl)2003-09-03 16:55:59 在 其他数据库开发 / Sybase 提问

sybase数据库表,有一个字段为3位的数字,现在想把它全部改为4位。注:unix服务器,远程登录修改,且此表有100万条以上的纪录。最好的方法是什么?十万火急!! 问题点数:0、回复次数:12Top

1 楼echo7410(hgl)回复于 2003-09-03 17:00:36 得分 0

对了,是在此字段的每条纪录前面加一个   1,怎么样做才能   又   快又保险?Top

2 楼xyzhh(逍遥者寒号)回复于 2003-09-03 17:42:54 得分 0

没有好的办法,自己写存储过程解决吧。说说自己的思路:可以新建一个表,比原来的表多一个自增行字段,用inert   into   tb_a   select   (c1,c2...)   from   tb_b把数据插到新表里,然后用存储过程根据自增行字段对每一条数据进行处理(此字段的每条纪录前面加一个   1),然后再用此法把数据insert回去。  
  Top

3 楼echo7410(hgl)回复于 2003-09-03 17:50:28 得分 0

谢谢您的建议,但是有   一个问题是表里的数据太庞大了,而修改又不能用太多的时间,所以想找一种比较快的方法,如果这样的话100万条记录得用多少时间?Top

4 楼nice90(我爱射雕,更爱蓉儿)回复于 2003-09-03 17:53:39 得分 0

我是赵敏。  
  如果不使用两个表,很难的。  
  我建议将这个表的所有数据导出到另外一个表中。例如原表为a表,第二个表为b表.  
  a(telephone,name)  
  b(telephone,name)  
  语句:  
  update   a   set   telephone='1'+   b.telephone   from   a,b   where   a.name=b.name  
  这条语句在SQL   Server里可以实现。  
   
  当然如果使用触发器可能也行,而且让用户自己更新。  
  每当用户输入该号码的时候,检查用户输入的后面几位是否和原来数据库中的相同,如果相同,则可以将该条记录更新,同时返回正确的结果。Top

5 楼nice90(我爱射雕,更爱蓉儿)回复于 2003-09-03 17:56:14 得分 0

这里要求name字段也是唯一的值。Top

6 楼xyzhh(逍遥者寒号)回复于 2003-09-03 18:04:07 得分 0

修改100万条数据,怎么也快不了Top

7 楼nice90(我爱射雕,更爱蓉儿)回复于 2003-09-03 18:09:55 得分 0

看了这个问题:  
  http://search.csdn.net/expert/topic/18/1802/2002/3/12/570725.htm  
  我对我的答案有几分信心了,同样是使用的Sybase,两个表,请看:  
  测试记录  
   
  test_1     1030100   records  
   
  Load   Time:13.569   secs;  
   
  test_2     1130100   records  
   
  Load   Time:14.210  
   
  select   count(a.product)  
   
  from   test_1   a,test_2   b    
   
  where    
   
      a.product=b.product  
   
  结果:687554;  
   
  联合查询:  
  select   a.product,a.age,a.gender,a.age2,a.gende2r   from  
      test_1   a,test_2   b  
  where    
      a.product=b.product  
   
  结果:15秒左右  
   
  联合查询+插入:  
   
  create   table   test_3(product   varchar(16),age   integer,gender   integer,age3   integer,gender3   integer);  
  insert   into   test_3   select   a.product,a.age,a.gender,b.age2,b.gende2r    
          from    
  test_1   a,test_2   b    
  where    
  a.product=b.product    
   
  插入687554条,时间42.912secs  
   
  平均   16022条/sec  
   
  批量更新:  
   
  用test_2的age2,gende2r字段更新test_1的age3,gender3字段;  
   
  update   test_1   a   set   age3=b.age2,gender3=b.gende2r   from   test_2   b   where   a.product=b.product   ;  
   
  更新了687554条,时间31.606secs  
   
  avg:   21754条/sec  
   
  test_1     10301000   records  
   
  Load   Time:91.552   secs;  
   
  112515/sec  
   
   
   
  test_2     11301000   records  
   
  Load   Time:101.777  
  111036条/sec  
   
  select   count(a.product)  
  from   test_1   a,test_2   b    
  where    
      a.product=b.product  
   
  结果:6867362;  
   
  联合查询:  
  select   a.product,a.age,a.gender,a.age2,a.gende2r   from  
      test_1   a,test_2   b  
  where    
      a.product=b.product  
   
  结果:180秒左右  
   
  联合查询+插入:  
   
  create   table   test_3(product   varchar(16),age   integer,gender   integer,age3   integer,gender3   integer);  
   
  insert   into   test_3   select   a.product,a.age,a.gender,b.age2,b.gende2r    
  from    
  test_1   a,test_2   b    
  where    
  a.product=b.product    
   
  插入6867362条,时间484.697secs  
   
  avg:   14168/sec  
   
  批量更新:  
   
  用test_2的age2,gende2r字段更新test_1的age3,gender3字段;  
   
  update   test_1   a   set   age3=b.age2,gender3=b.gende2r   from   test_2   b   where   a.product=b.product   ;  
   
  更新了6867362条,时间393.966secs  
  avg:   17431/secTop

8 楼zyhlhx(踏雪无痕)回复于 2003-09-03 18:10:00 得分 0

我觉得这样可能比较好:  
  1、建立一个视图   ,create   view   as   select   col1,col2,   '1'+col3,...   等    
  from   tablea      
  2   、bcp   view   出来    
  3   ,改名(删除)原来的表  
  4   、建立新符合要求的表,并   bcp     数据到这个表  
  这个应该最快,并且不会有大的日志。  
   
  Top

9 楼hanps()回复于 2003-09-04 14:35:38 得分 0

楼上的方法,是可以,不过速度。。。Top

10 楼zyhlhx(踏雪无痕)回复于 2003-09-04 14:41:03 得分 0

速度怎么样?当然是最快的,如果记录超过   100万   ,对   io   读写也最少  
  这个是我经过验证的秘籍!  
   
  Top

11 楼xyzhh(逍遥者寒号)回复于 2003-09-05 09:14:45 得分 0

同意楼上的Top

12 楼cuizu(如风)回复于 2003-09-05 09:46:41 得分 0

1、先把表上的索引抽出来,  
  2、然后drop掉索引  
  3、抽出数据  
  4、修改数据,倒入数据  
  在没有索引的时候插入数据还是很快的,不过注意清空日志。Top

相关问题

  • sybase加字段的问题?
  • Sybase中实现字段值自增。
  • sybase有自增类型的字段吗?
  • 一个表,含有一个text字段,指定另两个字段为索引字段,记录数9万多条,现在访问此表速度奇慢,不知为什么?
  • 急救:在Sybase中如何用DDL更改字段的长度?
  • 请问sybase中detatime字段的输入格式?
  • sybase自增量类型字段如何设置?在PowerDesigner 里呢?
  • 急问:如何在sybase中设置indentity字段的种子值?
  • sybase 数据库,字段类型text能否用getitemstring,setitem.........?
  • 怎么在sybase中修改字段的列长?

关键词

  • 字段
  • sybase
  • 数据库
  • 数据
  • sec
  • 用户
  • gende2r
  • 表
  • gender
  • 纪录

得分解答快速导航

  • 帖主:echo7410

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

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