Database SQL Server索引插入/更新性能

Database SQL Server索引插入/更新性能,database,sql-server-2008,database-performance,indexed-view,Database,Sql Server 2008,Database Performance,Indexed View,我知道索引会影响插入/更新性能,但我正在尝试排除故障并确定查询性能和插入/更新性能之间的正确平衡 我们已经为一些非常复杂的查询创建了许多视图(大约20个)。它们按键搜索速度非常慢(扫描5到10个键可能需要20秒) 为这些视图编制索引(在各个键列上同时使用聚集索引和非聚集索引)可以在80到100倍的范围内提高它们的性能。它还影响了插入/更新性能,以至于一个将大约100行插入到各种相关表中的脚本需要大约45秒才能运行,而不是瞬间运行 对于这些视图,我不希望采用OLAP方法(这将增加一个全新的复杂性层

我知道索引会影响插入/更新性能,但我正在尝试排除故障并确定查询性能和插入/更新性能之间的正确平衡

我们已经为一些非常复杂的查询创建了许多视图(大约20个)。它们按键搜索速度非常慢(扫描5到10个键可能需要20秒)

为这些视图编制索引(在各个键列上同时使用聚集索引和非聚集索引)可以在80到100倍的范围内提高它们的性能。它还影响了插入/更新性能,以至于一个将大约100行插入到各种相关表中的脚本需要大约45秒才能运行,而不是瞬间运行

对于这些视图,我不希望采用OLAP方法(这将增加一个全新的复杂性层……而且这些视图当前是可更新的,这将带来反向同步问题)……因此我试图找出如何平衡查询性能和插入/更新性能

有人能建议如何诊断特定的问题索引,以及减少其对插入/更新的影响的潜在方法吗

我已经尝试过使用覆盖索引、包含索引的索引和复合聚集索引作为替代方法,以查看它是否有所不同(实际上没有)


谢谢。

对于这种情况,请使用单列else筛选索引,并避免使用具有两列以上的组合索引

对于这种情况,请使用单列else筛选索引,并避免包含两列以上的复合索引

这是一个相当普遍的问题。您是否查看了检查表中的慢查询?特别是,您是否查看了查询的执行计划,是否尝试过将数据库引擎优化顾问与具有代表性的工作负载一起使用,以了解它的建议?如果您需要有关特定查询的帮助,那么您应该发布视图/表、查询的详细信息,尤其是执行计划。是的,我已经查看了检查表-但请记住,查询运行得很快,而插入/更新运行得很慢。我已经看过数据库调优顾问,它建议我删除视图上的所有索引(我假设是因为我的测试工作负载不包括noexpand选项,所以它不使用视图索引)。顾问没有提供任何其他有用的信息。有大约20个大的问题,他们涉及复杂的主题知识…所以我不知道这将是多么有用的张贴他们。我正在寻找一般建议。如清单所示,这些要点对查询和插入/更新都有效。如果清单中的一般建议没有帮助,如果细节太具体/太多而无法分享,那么我不确定其他人还能提出什么建议。如果您当前的设置确实无法提高性能,那么您可能必须研究更激进的方法,例如分区表或重新构建数据库,或者聘请专业顾问帮助进一步调查。您是通过视图进行插入,还是直接点击表进行插入?基础表上是否有触发器?这是一个相当普遍的问题。您是否查看了检查表中的慢查询?特别是,您是否查看了查询的执行计划,是否尝试过将数据库引擎优化顾问与具有代表性的工作负载一起使用,以了解它的建议?如果您需要有关特定查询的帮助,那么您应该发布视图/表、查询的详细信息,尤其是执行计划。是的,我已经查看了检查表-但请记住,查询运行得很快,而插入/更新运行得很慢。我已经看过数据库调优顾问,它建议我删除视图上的所有索引(我假设是因为我的测试工作负载不包括noexpand选项,所以它不使用视图索引)。顾问没有提供任何其他有用的信息。有大约20个大的问题,他们涉及复杂的主题知识…所以我不知道这将是多么有用的张贴他们。我正在寻找一般建议。如清单所示,这些要点对查询和插入/更新都有效。如果清单中的一般建议没有帮助,如果细节太具体/太多而无法分享,那么我不确定其他人还能提出什么建议。如果您当前的设置确实无法提高性能,那么您可能必须研究更激进的方法,例如分区表或重新构建数据库,或者聘请专业顾问帮助进一步调查。您是通过视图进行插入,还是直接点击表进行插入?基础表上是否有触发器?