Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.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_Sql Server - Fatal编程技术网

实现Sql Server读写性能的策略有哪些?

实现Sql Server读写性能的策略有哪些?,sql,sql-server,Sql,Sql Server,我是一名新手,无论是在stack overflow还是在sql server上,如果这个问题在任何方面都不合适,请告诉我:) 我正在开发一个web应用程序,用于分析存储在SQLServer2008数据库中的大量数据。该界面不允许用户更新或插入任何数据,因此除了用户数据的某些更新外,将主要向数据库发送SELECT命令 每天晚上,系统都会关闭并刷新来自其他来源的信息。此刷新还将涉及大量数据,因此数据库在此阶段将主要执行INSERT和UPDATE命令 我已经创建了适当的索引,以在select上实现良好

我是一名新手,无论是在stack overflow还是在sql server上,如果这个问题在任何方面都不合适,请告诉我:)

我正在开发一个web应用程序,用于分析存储在SQLServer2008数据库中的大量数据。该界面不允许用户更新或插入任何数据,因此除了用户数据的某些更新外,将主要向数据库发送SELECT命令

每天晚上,系统都会关闭并刷新来自其他来源的信息。此刷新还将涉及大量数据,因此数据库在此阶段将主要执行INSERT和UPDATE命令

我已经创建了适当的索引,以在select上实现良好的性能,但是这些索引会导致夜间刷新速度变慢。我想要“两个世界中最好的”,所以我搜索了一下,发现一个常见的策略是在写入数据之前删除/禁用所有索引,然后重新创建它们。我还听说一个更好的方法是限制索引的fillfactor,这样可以避免编写删除和重新创建索引的脚本


您认为在这里使用的最佳方法是什么?我的主要目标是良好的性能?我应该使用“fillfactor”方法,还是应该直接编写脚本来删除/重新创建索引?欢迎提出任何建议

每晚删除/重新创建索引将有所帮助。填充因子仅在插入/更新的级别导致碎片时提供好处。您可以通过运行
DBCC SHOWCONTIG
(注意生产,如果数据库很大)。

另一个应该提高性能的选项是在“系统刷新”期间将数据库的恢复模式从完全切换到简单,然后切换回


您应该在切换回“完全”后进行完全备份,但这可能是值得的,最好是针对工作负载进行备份,请参见。

避免索引过多-只是简单地为每一列编制索引,因为您可以,这肯定会降低性能!;-)我想补充一点,我们的一个客户有一个进程,每晚处理大约100GB的数据。在我们的例子中,我们删除索引,截断表,进行插入,然后重新添加索引。我们谈论的是数亿张唱片。这条路径将处理速度提高了40倍。也就是说,过去需要20小时,现在需要30分钟。另外,注意你的恢复模式。当以这种方式处理大量数据时,它变得至关重要。您可能想尝试使用不同的模型,直到找到一种能够保持所需恢复功能的性能的模型。感谢Nick(和Chris)的提示,我不得不承认,直到现在我还没有考虑过恢复模型。我要试试看!