表A 数据量是千万级别的,新增一字段column_b,需要在该字段上加索引,并需要设置该字段等于表A中的字段column_a,脚本为:
update A SET A.columna = A.column_b (整个表的数据都需要更新)
请问是先加索引,再更新数据, 还是先更新数据,再加索引,2种方法哪种效率更高?
5 个解决方案
#1
先更新在建索引。
#2
取消索引、约束,然后更新/插入 ,再加索引、约束。这样锁的数量会少很多。
#3
先把数据复制好了再建索引吧 索引会影响更新和插入的效率 从这点上说还是需要先写入数据 在创建索引
#4
建立索引的目的是加快对表中记录的查找或排序。
为表设置索引要付出代价的:
一是增加了数据库的存储空间;
二是在插入和修改数据时要花费较多的时间(因为索引也要随之变动)
建立合适的索引,一般情况是会提高查询效率的,
当然T-sql用不用索引,还要看SQL Server计算出来的成本,
而且SQL Server有时候还会生成不好的执行计划,就算有索引也不会使用它。
另外当查询结果返回数据量超过表的总数据量的一定比例(一般20%以上)的时候有无索引速度没有差异
#5
根据你SQL代码反应的需求,应该是先更新,然后给该字段加索引。
#1
先更新在建索引。
#2
取消索引、约束,然后更新/插入 ,再加索引、约束。这样锁的数量会少很多。
#3
先把数据复制好了再建索引吧 索引会影响更新和插入的效率 从这点上说还是需要先写入数据 在创建索引
#4
建立索引的目的是加快对表中记录的查找或排序。
为表设置索引要付出代价的:
一是增加了数据库的存储空间;
二是在插入和修改数据时要花费较多的时间(因为索引也要随之变动)
建立合适的索引,一般情况是会提高查询效率的,
当然T-sql用不用索引,还要看SQL Server计算出来的成本,
而且SQL Server有时候还会生成不好的执行计划,就算有索引也不会使用它。
另外当查询结果返回数据量超过表的总数据量的一定比例(一般20%以上)的时候有无索引速度没有差异
#5
根据你SQL代码反应的需求,应该是先更新,然后给该字段加索引。