这是笔者qq群里一个同仁问的问题。同时他遇到的问题随着时间推移也在变化,但是都与数据量大有关。
1. 大数据量下的delete问题
2. 大数据量下的update问题
该同仁说他的数据库数据记录比较多,大约几百万条记录的级别。删除一条记录10分钟都不能完成。他很头痛。问有没有解决办法。我想起我写的文章<<关于大型asp.net应用系统的架构—如何做到高性能高可伸缩性>>一文,我提到过,delete不要实时去做。可以集中来处理。在实时只是给这个记录做个需要删除标记(用update语句就可以了)。到晚上系统不忙的时候再来集中处理,来真正删除记录。然后这个同仁就按这个办法去做了。后来告诉我说delete问题解决了,快一些了。虽然我没有见过他的数据库是什么样子,但是能帮他解决问题,我也很高兴。
过了几个月,他又有新问题了,他说,数据更多了,现在即使给要删除的记录做个标记(即一个update语句)也要很长时间,要几十分钟。我问了下情况,原来是前面那个问题的的升级版问题。他现在给要删除的记录做待删除标记,用一个有WHERE条件的update语句。找到WHERE条件的记录,即一个搜寻的过程。现在就是按这个WHERE条件搜寻过程需要很长时间。我问了他的WHERE条件是什么,还问了他的cluster index是什么,和non-cluster index是什么。最后发现他的WHERE条件既不匹配cluster index, 也不匹配non-cluster index。所以即使是一个Update也特别耗时间。于是对他讲了如何选cluster index, 比如短的字段,并且有单向递增特性。他照我说的方法去做了。然后说千万级别的记录,给一个记录标记需要删除就快很多了。只要一秒多就完成了。呵呵,我心中又是很高兴的。
希望能帮到你!