15万条数据的表,select和update引发的死锁问题

sqlserver2005 表15万条左右的新闻数据,陆续增加中,没有做索引,有主键。主要用来读数据,浏览。写操作涉及的是每浏览一次新闻,相应的新闻纪录 update news set Hit=Hit+1 wehere id=xx 一次访问数,最近网站访问量增加,发现很多update在死锁状态,去掉update后性能有所改善,但网站还是需要了解每条新闻的访问量,这个问题该如何解决好?

作者: ideasky   发布时间: 2011-06-15

在 id上建个索引

作者: sekai2011   发布时间: 2011-06-15

浏览和更新同一条记录怎么会引起死锁呢?
做过新闻类网站,和你描述的结构和操作类似,但从没遇到过死锁问题.

作者: qianjin036a   发布时间: 2011-06-15

增加点击率的这个sql不要写在 查看新闻的页面里  
可以使用 ajax 异步请求那条sql ,也就是页面加载完成后请求这个增加点击量的sql 。
就是出现并发等待。。。用户也感觉不出来了

作者: aspwebchh   发布时间: 2011-06-15

建议加个事务,包含读/写两个操作,而且最好先写后读.

作者: qianjin036a   发布时间: 2011-06-15

分表如何?把NewsId Hit放到另一个表做update用,不影响select的表,但维护起来麻烦。。

作者: ideasky   发布时间: 2011-06-15

SQL code

update news set Hit=Hit+1 wehere id=xx


这里的ID列就是PRIMARY KEY吗?

作者: misterliwei   发布时间: 2011-06-15



引用 6 楼 misterliwei 的回复:

SQL code

update news set Hit=Hit+1 wehere id=xx


这里的ID列就是PRIMARY KEY吗?



是呀

作者: ideasky   发布时间: 2011-06-15

如果仅仅是这样一个语句,又使用聚集索引,不应该引起死锁的。
我觉得还是查查是否有其它地方更新了该表。

作者: misterliwei   发布时间: 2011-06-15

引用 5 楼 ideasky 的回复:
分表如何?把NewsId Hit放到另一个表做update用,不影响select的表,但维护起来麻烦。。

是个好办法,不影响原表的正常使用,维护工作量也并不大,建议楼主尝试

作者: cd731107   发布时间: 2011-06-15