总结自己项目中遇到的数据库优化以及程序优化方法
---------------------2015-10-16------同步表(timestamp时间戳)---------------------------------
运用timestamp(时间戳)同步表.
方法:在同步表中添加timestamp类型的字段
timestamp时间戳: 每个数据库都有一个计数器,当对数据库中包含 timestamp 列的表执行插入或更新操作时,该计数器值就会增加。 该计数器是数据库时间戳。 这可以跟踪数据库内的相对时间,而不是时钟相关联的实际时间。 一个表只能有一个 timestamp 列。 每次修改或插入包含 timestamp 列的行时,就会在 timestamp 列中插入增量数据库时间戳值。 这一属性使 timestamp 列不适合作为键使用,尤其是不能作为主键使用。 对行的任何更新都会更改 timestamp 值,从而更改键值。 如果该列属于主键,那么旧的键值将无效,进而引用该旧值的外键也将不再有效。 如果该表在动态游标中引用,则所有更新均会更改游标中行的位置。 如果该列属于索引键,则对数据行的所有更新还将导致索引更新。
存储过程如下:
DECLARE @max_rowstate bigint
SET @max_rowstate =0
SELECT @max_rowstate=max(rowstate) from channel.dbo.[butie] WITH (NOLOCK)
DELETE from channel.dbo.[butie] where id in
(SELECT ID FROM CONNECT_TUTU_R.tutu.dbo.[butie] WITH (NOLOCK) where rowstate>@max_rowstate)
---------------------------------
INSERT INTO channel.dbo.[butie] (id, ..., rowstate)
SELECT id, ..., rowstate
FROM CONNECT_TUTU_R.tutu.dbo.[butie] WITH (NOLOCK) where rowstate>@max_rowstate
DELETE from channel.dbo.[butie] where id in
(SELECT ID FROM CONNECT_TUTU_R.tutu.dbo.[butie] WITH (NOLOCK) where rowstate>@max_rowstate)
---------------------------------
INSERT INTO channel.dbo.[butie] (id, ..., rowstate)
SELECT id, ..., rowstate
FROM CONNECT_TUTU_R.tutu.dbo.[butie] WITH (NOLOCK) where rowstate>@max_rowstate