如何优化快速插入表?

时间:2009-09-23 20:48:49

标签: sql-server sql-server-2005 architecture

我有一个日志表,可以从多个Web应用程序接收插入内容。我不会对这些数据进行任何搜索/排序/查询。我将把数据拉到另一个数据库来运行报告。初始表严格用于接收日志消息。

有没有办法确保Web应用程序不必等待这些插入?例如,我知道添加大量索引会减慢插入速度,所以我不会。那里还有什么?我不应该添加主键吗? (每晚会将表格抽取到报告数据库中,该数据库将包含大量键/索引)

3 个答案:

答案 0 :(得分:10)

如果性能很关键,您可能不希望将此数据写入数据库。我想大多数事情都会将数据库写入处理为往返,但听起来你不想等待返回的确认消息。检查,正如S. Lott建议的那样,将行添加到某个简单的文本文件可能不会更快。

如果数据库写入更快(或者出于安全性或其他业务/操作原因需要),我会在表上放置 no 索引 - 并且包括主键。如果它不会用于读取或更新,并且如果您不需要关系完整性,那么您就不需要在此表上使用PK。

推荐显而易见的:作为每晚报告运行的一部分,清除表中的内容。此外,永远不要重置数据库文件大小(ye olde shrink database命令);经过一周左右的常规使用后,数据库文件应该是它们需要的大小,您不必担心文件增长性能受到影响。

答案 1 :(得分:6)

以下是一些想法,请注意最后一些想法,你会有极高的音量:

  • 没有主键,它通过索引强制执行
  • 没有任何其他索引
  • 创建足够大的数据库,使您没有任何数据库增长
  • 将数据库放在自己的磁盘上以避免争用
  • 避免软件RAID
  • 将数据库放在镜像磁盘上,保存在RAID 5上完成的计算

答案 2 :(得分:5)

没有钥匙, 没有限制, 没有验证, 没有触发器, 没有计算列

如果可以,请让服务插入异步,以便不等待结果(如果可以接受)。

您甚至可以尝试插入“每日”表格,这应该是更少的记录, 然后在批处理晚上运行之前移动它。

但主要是在桌面上NO KEYS / Validation(PK和Unique索引会杀了你)