Sql server 无更新的SQL快速插入
我们在SQLServer2008DB中使用单个表进行审计 单表体系结构运行良好,查询简单,适应模式更改 但这是整个数据库的一个主要瓶颈。所有插入和更新都必须通过审核表 我们已经对SELECT语句使用NOLOCK提示Sql server 无更新的SQL快速插入,sql-server,insert,Sql Server,Insert,我们在SQLServer2008DB中使用单个表进行审计 单表体系结构运行良好,查询简单,适应模式更改 但这是整个数据库的一个主要瓶颈。所有插入和更新都必须通过审核表 我们已经对SELECT语句使用NOLOCK提示 由于此表没有更新,是否有提高INSERT语句吞吐量的建议?我唯一的建议是: 确保尽可能多地写入非字符串值 通过存储过程封装对审核的写入 从存储过程调用或 考虑在审计存储过程中使用单独的“仅用于此目的”视图。确保其联接尽可能少。此视图用于在尝试查找字符串数据的FK时查找审核消息的PK
由于此表没有更新,是否有提高INSERT语句吞吐量的建议?我唯一的建议是:
- 确保尽可能多地写入非字符串值
- 通过存储过程封装对审核的写入
- 从存储过程调用或
- 考虑在审计存储过程中使用单独的“仅用于此目的”视图。确保其联接尽可能少。此视图用于在尝试查找字符串数据的FK时查找审核消息的PK等
- 这不是一个建议,而是一个事实:索引越少意味着插入速度越快+选择速度越慢
- 考虑将“旧”审核行归档到另一个表中。使审核表尽可能小。将那些旧的审核行移到另一个表中。对于报告/查询,创建一个视图,该视图将加入“活动”和“旧”审核
贾景晖< /P> < P>如果您只追加到审计表并运行将始终执行表扫描的报表,请考虑删除表上的任何索引。
我正在沿着这些行工作。我有一个标识聚集主键,因此插入内容实际上是最后一页中的附加内容。100%填充系数是一个很好的触感。我考虑每月维护一次,将记录移动到一个“永久”的历史记录表中,这样主表就不会变大。好吧,如果索引不断增加,那么即使表的大小也不是什么大问题(显然,选择除外)