小毛病,大问题

今天用户抱怨,为什么数据库中条目的计数越来越大,而且清空数据库后重新计数,还是变大?

其实这是我在设计的时候懒惰造成的,产品使用的是SQLServer数据库,数据库的字段ID是标识列,是自增的,当时没有考虑ID变大的情况,所以就任由着字段编号无限的变大,也没有注意,当用户抱怨的时候,也没太当回事,因为程序没有什么错误呀.

其实这是一个不好的用户体验,而我们完全可以解决,其实在删除数据或全部删除数据的时候,增加一个校验,如果数据库中记录数目为0,那么就重新设置标识列的计数,也就很简单了,其实我们真的不应该忽视任何细节,就是一个简单的删除记录/清空表,其实都大有学问的.

在SQLServer中的解决方法如下:

DBCC CHECKIDENT
检查指定表的当前标识值,如有必要,还对标识值进行更正。

举例:
DBCC CHECKIDENT (TableName,  RESEED, 1)

强制表中的当前标识值为 1。

另外一条需要注意的语句是

TRUNCATE TABLE
删除表中的所有行,而不记录单个行删除操作。

DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项。TRUNCATE TABLE 通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。

TRUNCATE TABLE 删除表中的所有行,但表结构及其列、约束、索引等保持不变。 新行标识所用的计数值重置为该列的种子。如果想保留标识计数值,请改用 DELETE。如果要删除表定义及其数据,请使用 DROP TABLE 语句。

若要删除表中的所有行,则 TRUNCATE TABLE 语句是一种快速、无日志记录的方法。该语句总是比不带条件的 DELETE 语句要快,因为 DELETE 语句要记录对每行的删除操作,而 TRUNCATE TABLE 语句只记录整个数据页的释放。TRUNCATE TABLE 语句立即释放由该表的数据和索引占用的所有空间。所有索引的分发页也将释放。

与 DELETE 语句相同,使用 TRUNCATE TABLE 清空的表的定义,同其索引和其它相关的对象一起仍保留在数据库中。必须使用 DROP TABLE 语句才能除去表的定义。

呵呵,有些时候看帮助就是不认真,往往几句话,能够对程序性能和效果有很大的改变.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值