Sql server 无更新的SQL快速插入

Sql server 无更新的SQL快速插入,sql-server,insert,Sql Server,Insert,我们在SQLServer2008DB中使用单个表进行审计 单表体系结构运行良好,查询简单,适应模式更改 但这是整个数据库的一个主要瓶颈。所有插入和更新都必须通过审核表 我们已经对SELECT语句使用NOLOCK提示 由于此表没有更新,是否有提高INSERT语句吞吐量的建议?我唯一的建议是: 确保尽可能多地写入非字符串值 通过存储过程封装对审核的写入 从存储过程调用或 考虑在审计存储过程中使用单独的“仅用于此目的”视图。确保其联接尽可能少。此视图用于在尝试查找字符串数据的FK时查找审核消息的PK

我们在SQLServer2008DB中使用单个表进行审计

单表体系结构运行良好,查询简单,适应模式更改

但这是整个数据库的一个主要瓶颈。所有插入和更新都必须通过审核表

我们已经对SELECT语句使用NOLOCK提示


由于此表没有更新,是否有提高INSERT语句吞吐量的建议?

我唯一的建议是:

  • 确保尽可能多地写入非字符串值
  • 通过存储过程封装对审核的写入
  • 从存储过程调用或
  • 考虑在审计存储过程中使用单独的“仅用于此目的”视图。确保其联接尽可能少。此视图用于在尝试查找字符串数据的FK时查找审核消息的PK等
  • 这不是一个建议,而是一个事实:索引越少意味着插入速度越快+选择速度越慢
  • 考虑将“旧”审核行归档到另一个表中。使审核表尽可能小。将那些旧的审核行移到另一个表中。对于报告/查询,创建一个视图,该视图将加入“活动”和“旧”审核
确保表上有INT(或BIGINT)标识主聚集索引!最好没有其他指标(如果可能的话)——这些指标会减慢插入速度

一个常见的误解是,由于表只需要插入,几乎不需要读取,所以您应该“省去”主键、聚集键的麻烦

作为SQL Server索引之神,Kimberly Tripp在她的优秀博客文章中解释道:

在集群中插入速度更快 表(但仅在“右侧”中) 群集表)与 堆这里的主要问题是 在IAM/PFS中查找以确定 堆中的插入位置是 比在集群表中慢 (如果已知插入位置, 由聚集键定义)。插入 插入表格时速度更快 订单定义的位置(CL)和位置 这一订单在不断增加

因此,聚集索引可以加快插入速度,这里的意思是静态(从不更改)、唯一、尽可能小(INT或BIGINT),最好是不断增加(没有页面分割,因此没有性能损失)

此外,如果您的表只接收插入而没有更新/删除,则应确保在聚集索引上使用100%的填充因子来完全填充这些SQL server页面


贾景晖< /P> < P>如果您只追加到审计表并运行将始终执行表扫描的报表,请考虑删除表上的任何索引。

我正在沿着这些行工作。我有一个标识聚集主键,因此插入内容实际上是最后一页中的附加内容。100%填充系数是一个很好的触感。我考虑每月维护一次,将记录移动到一个“永久”的历史记录表中,这样主表就不会变大。好吧,如果索引不断增加,那么即使表的大小也不是什么大问题(显然,选择除外)