Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何仅为快速插入优化表?_Sql Server_Sql Server 2005_Architecture - Fatal编程技术网

Sql server 如何仅为快速插入优化表?

Sql server 如何仅为快速插入优化表?,sql-server,sql-server-2005,architecture,Sql Server,Sql Server 2005,Architecture,我有一个日志表,它将接收来自多个web应用程序的插入。我不会对这些数据进行任何搜索/排序/查询。我将把数据拉到另一个数据库来运行报告。初始表严格用于接收日志消息 有没有办法确保web应用程序不必等待这些插入?例如,我知道添加大量索引会降低插入速度,所以我不会这样做。还有什么?我不应该添加主键吗?(每天晚上,表格都会被压缩到一个reports DB,其中会有很多键/索引)这里有一些想法,请注意,对于最后一个非常重要的想法,您将拥有非常高的容量: 没有主键,它是通过索引强制执行的 没有任何其他索引

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


有没有办法确保web应用程序不必等待这些插入?例如,我知道添加大量索引会降低插入速度,所以我不会这样做。还有什么?我不应该添加主键吗?(每天晚上,表格都会被压缩到一个reports DB,其中会有很多键/索引)

这里有一些想法,请注意,对于最后一个非常重要的想法,您将拥有非常高的容量:

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

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

如果数据库写入速度更快(或者出于安全或其他业务/操作原因,这是必需的),我将不在表上放置索引,这包括一个主键。如果它不用于读取或更新,并且不需要关系完整性,那么就不需要在这个表上设置PK

推荐显而易见的方法:作为夜间报告运行的一部分,清除表中的内容。另外,永远不要重置数据库文件大小(yeolde shrink database命令);经过一周左右的正常使用后,数据库文件的大小应该与需要的一样大,您不必担心文件增长会影响性能。

无键, 没有限制, 没有验证, 没有触发器, 没有计算列

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

您甚至可以尝试插入到“每日”表中,该表应包含较少的记录, 然后在晚上批次运行之前将其移动


但大多数情况下,表中没有键/验证(PK和唯一索引会让你丧命)

为什么要使用SQL?为什么不简单地写入文件以加载到报表数据库中呢?老实说,我从来没有想过使用常规日志文件,我将对此进行研究。在一个全天候的互联网世界中,不再存在白天与黑夜的概念。如何将“旧”信息移出(但仍保留在数据库中)?不断地每X分钟?有什么想法吗?