select COUNT(1) from tablename;半天都出不来结果
现在更是要更新下数据
update tablename set DOCKEYVAL=REPLACE(DOCKEYVAL, '001,', '141,');
肯定更慢了是吧,这种情况下,怎么能加快一下速度呢?
------解决方案--------------------
表有多少数据?
update语句不需要任何条件吗?
------解决方案--------------------
select COUNT(1) from tablename是聚集表或者是有索引的话,我估计没那么慢
但是你一下子更新600W条数据的话,普通的服务器的话,真的有点扛不住,我也不知道如何“优化”了
建议如果真的要更新的话,将数据库设置为简单恢复模式,还有就是能不能想办法一部分一部分的分批去更新?
------解决方案--------------------
1、为什么不查系统提供的视力。Sys.Partitions
2、既然数据量大,那只有提高IO(分享日志与数据到独立磁盘上)能力
------解决方案--------------------
update是一个整体事务,没有提交或者回滚前都不会直接影响数据库的数据。
如果不需要条件update,可以考虑下面步骤:1. 备份这个表。2.select xxxx,REPLACE(DOCKEYVAL, '001,', '141,') as DOCKEYVAL ,XXXX into #t FROM 你的表,其中xxx就是不需要更新的列,保持表结构的列名一致。3. truncate table 你的表 4. insert into 你的表(列一一对应) select * from #t
------解决方案--------------------
问题1:
在你的主键上添加一个非聚集索引
问题2
方案1:先干掉与这个字段相关的索引,然后做update动作后再把索引重建上去,缺点这样其他用户要同时使用这个表就不行了
------解决方案--------------------
方案3:创建一个新表,然后把数据导入过来,用switch to会很省时间例如下面脚本
然后在这张表上进行各种操作就不影响其他用户了,update完毕以后,用 tablediff 方式对比是否有差异,并处理,再通过sp_rename的方式切换回去,最后用 tablediff 确认没有其他修改,工作就完成了。
老是提示发帖错误- -我就分多次发帖了