【问题标题】:SQL Server Index performance for joins连接的 SQL Server 索引性能
【发布时间】:2011-06-25 17:15:13
【问题描述】:

我有 2 个表,Items 和 ItemDetails。通常,对此数据的任何查询都是通过 Items_join_ItemDetails 视图执行的,该视图在公共 ItemID 字段上连接两个表。

目前 ItemDetails 在 (Date, ItemID) 上有一个聚集索引,在 ItemID 上有一个非聚集索引。 Items 在 ItemID 上有一个聚集索引。

当查询视图时,它几乎总是针对一个日期范围,这就是为什么聚集索引在 ItemDetails 的 Date 上。但是,这意味着视图必须使用 ItemDetails 的非聚集 ItemID 索引来加入。

如果我切换 ItemDetails 的聚集索引和非聚集索引,性能会更好吗?我可以看到这将如何帮助连接操作,但是我也可以看到它会如何损害查询的日期过滤。

【问题讨论】:

  • 可以添加表格+视图吗?
  • 这是一个更普遍的问题,即我的索引应该支持联接还是查询,但我很快会尝试发布类似于我的表/视图定义的内容。
  • 这些将允许我们评论您是否需要更改要覆盖的索引
  • 再想一想,我将从那篇关于覆盖索引的文章中学到什么,看看我自己可以做出哪些改进。不过,我感谢您的帮助。

标签: sql-server performance join view indexing


【解决方案1】:

聚集索引超过 2 列,因此 ItemID 上的连接应该来自该索引。单独的 ItemID 上的 NC 索引可能未使用,至少对于此查询而言。

更重要的是确保indexes are covering: 所有需要的列都在索引中。

您有任何性能问题吗?

我们还需要表和视图定义来提出进一步的建议。

【讨论】:

    猜你喜欢
    • 2011-01-04
    • 1970-01-01
    • 2013-02-04
    • 2010-11-08
    • 2010-12-04
    • 1970-01-01
    • 1970-01-01
    • 2021-04-19
    • 1970-01-01
    相关资源
    最近更新 更多