我正在努力提高应用程序的数据库性能,现在它涉及到集群索引的部分。我没有这方面的经验,所以我想问一下。
我的应用程序注意事项
在我的应用程序中,我有Show的概念。
这意味着用户可以创建/打开一个Show,然后它将只访问与该Show相关的对象(演员、衣服、物品等)。因此,使用">…WHERE ShowId=X"进行查询确实很常见
此外,由于集成,我们确实有很多插入(我们每天都有一项工作在运行,可以在同一个Show中向数据库中添加+/-3万个新行),而删除并不是那么常见。。。用户可能会删除一个Show(这确实需要很长时间)。
应用程序的用法通常类似于:
- 用户基于"主秀"创建一个Show(复制大量数据,只更改ShowId)
- 用户在某些屏幕上导航以检查此数据
- 用户调用一个算法来处理这个节目的输入并生成大量输出(在同一个节目中再次插入30k以上)
- 用户分析这些输出
问题
基于此,我认为对于每个表,最好的聚集键应该在[ShowId,id]上。但是,在阅读本文档时,我怀疑考虑到插入的数量,这是否会使情况变得更糟,或者因为插入是在同一ShowId上进行的,所以是否可以。
我没有访问PRD数据库的权限,也没有用于测试的副本。我用开发数据库进行了测试,但它太小了,似乎根本没有任何影响。
有人能帮忙吗?
如果没有更多信息,很难给出答案。您也应该考虑发布表格结构。
的确,对于您添加的每一个索引,您都会在插入时生成一个开销。但是,如果您需要使用"WHERE SHOWID=…",在这种情况下,您将对SELECT产生强烈的积极影响(在大表上,并且考虑到SHOWID非常有选择性,即在整个表的许多记录之上有几个记录)。
你说:
"我没有访问PRD数据库的权限,也没有它的副本测试。我用开发数据库进行了测试,但它太小了,没有似乎有任何影响。">
但是您可以使用执行计划来查看查询将如何使用您的索引/表。此外,您可以很容易地生成多个随机记录来进行测试。