【问题标题】:SQL Server Indexes INSERT/UPDATE PerformanceSQL Server 索引插入/更新性能
【发布时间】:2012-03-31 15:08:06
【问题描述】:

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

我们为一些非常复杂的查询创建了许多视图(大约 20 个)。他们通过按键搜索真的很慢(可能需要 20 秒才能扫描 5 到 10 个按键)。

为这些视图编制索引(在各种关键列上使用聚集索引和非聚集索引)可将它们的性能提高 80 倍至 100 倍。它还会损害插入/更新性能,以至于将大约 100 行插入各种相关表的脚本需要大约 45 秒才能运行,而不是即时运行。

我不想为这些视图走 OLAP 路线(这会增加一个全新的复杂层......并且这些视图当前是可更新的,这会造成反向同步问题)......所以我'试图弄清楚如何平衡查询性能与插入/更新性能。

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

我已经尝试过使用覆盖索引、包含 INCLUDE 的索引和复合聚簇索引作为替代方法,看看它是否会产生影响(实际上并没有)。

谢谢。

【问题讨论】:

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

标签: database sql-server-2008 database-performance indexed-view


【解决方案1】:

对于这种情况,请使用单列过滤索引,并避免使用多于两列的复合索引。

【讨论】:

    猜你喜欢
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    • 2020-12-15
    • 1970-01-01
    • 2011-11-16
    相关资源
    最近更新 更多