请教各位大师阿.现在小弟在使用一个postgresql数据库.有张叫raw_data的表存储了一千多万条数据.现在想更新该表的叫status_code的值,想把它更新为0之前查询了下status_code不为0的值,大概有67万条.为什么直接用:update raw_data set status_code = '0';执行了一个晚上都没有反应呢? 大家帮帮忙啊.等着大家回复.之前我看了下表,在status_code上面有索引.可是我把索引删除以后,执行更新语句还是没有反应.希望大家给点意见阿.
你这样,就是把整张表都更新了,把为0也更新一遍了
update raw_data set status_code ='0' where status_code <>'0'
建索引会比不建索引很快一些的
绝对比不建索引花在update上面少多了
哦。原来是这样的,那建立索引的时间是算在update上面的吗?我之前也问过别人一些提高插入数据效率的方法。他们普遍都说:如果有索引的话,现把索引删除了,再插入数据,最后再建立索引。
我想更新操作也应该类似吧。我现在正在数据库上测试,到底有索引update快一点还是没有索引快一点
where status_code <>'0' 这句话估计系统不会使用索引了。参考: B-tree 可以处理那些可以按照某种顺序存储的数据的等于和范围查询。 特别是在一个建立了索引的列涉及到使用下列操作符之一进行比较的时候, PostgreSQL 的查询规划器都会考虑使用 B-tree 索引∶<
<=
=
>=
>
用>0或者<0就ok了
说明有索引开销确实要大一点
察看了下,也有上万个不同的值。实在是想不到办法啊。
sql优化参考 http://topic.csdn.net/u/20080808/14/DFC973E7-FCF2-4526-9DE1-FA5EFC148F5C.htmlnnd,我的2000多万条,有什么心得去回复我的提问:http://topic.csdn.net/u/20080822/18/73c7b002-65c9-462d-9197-eb6e8452124c.html