聚集索引 - 权衡查询VS插入?

时间:2017-11-15 08:54:08

标签: sql-server database clustered-index

我正致力于提高应用程序的数据库性能,现在它涉及聚集索引的一部分。我没有经验,所以我想问一下。

我的申请会发出警告

在我的应用程序中,我有显示的概念。

这意味着用户可以创建/打开一个节目,然后它只能访问与该节目相关的对象(演员,衣服,物品等)。 因此,使用“ ... WHERE ShowId = X ”进行查询真的很普通

此外,由于集成,我们确实有很多插入(我们每天都会运行一个可以在数据库中获得+/- 30k新行的作业,所有这些都在同一个Show中)并且删除不是那么常见...用户可以删除一个节目(实际上花了很长时间)。

应用程序的用法通常如下:

  • 用户根据“主秀”创建一个节目(复制大量数据只改变ShowId)
  • 用户在某些屏幕上导航以检查此数据
  • 用户调用一个算法来处理此节目的输入并生成大量输出(30k +再次插入,在同一节目中)
  • 用户分析这些输出

问题

基于此,我认为每个表的最佳聚簇键都在[ShowId,id]上。但是,阅读this文档,我怀疑如果这不会使插入的数量变得更糟,或者是因为插入是在同一个ShowId上制作的,那就没问题

我无法访问PRD数据库,也无法访问PRD数据库的副本进行测试。我使用dev数据库进行了测试,但它很小,似乎根本没有任何影响。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

如果没有更多信息,很难给出答案。您也应该考虑发布表格结构。

对于您添加的每个索引,您都会在插入时产生开销。但是如果你需要使用“WHERE SHOWID = ...”,那么在这种情况下你会对你的SELECT产生强烈的积极影响(在一个大表上,并考虑SHOWID非常有选择性,即对很多记录的一些记录)整个表)。

你说:

  

“我无法访问PRD数据库,也无法访问它的副本   测试。我使用dev数据库进行了测试,但它没有那么小   似乎有任何影响。“

但是您可以使用执行计划来查看查询将如何使用您的索引/表。此外,您可以非常轻松地生成多个随机记录以进行测试。