【发布时间】:2017-11-15 08:54:07
【问题描述】:
我正在努力提高我的应用程序的数据库性能,现在涉及到聚集索引的部分。我没有这方面的经验,所以我想问一下。
我的申请注意事项
在我的应用程序中,我有 Show 的概念。
这意味着用户可以创建/打开一个节目,然后它将只访问与该节目相关的对象(演员、衣服、物品等)。 因此,使用 "...WHERE ShowId = X"
进行查询真的很常见此外,由于集成,我们确实有相当多的插入(我们每天都在运行一项工作,它会在数据库中获得 +/- 30k 的新行,所有这些都在同一个 Show 中)并且删除并不常见......用户可能会删除一个节目(这确实需要很长时间)。
应用程序的用法通常是这样的:
- 用户根据“主秀”(复制大量数据仅更改 ShowId)创建节目
- 用户在某些屏幕上导航以检查此数据
- 用户调用一种算法来处理该节目的输入并生成大量输出(在同一节目中再次插入 30k+ 次)
- 用户分析这些输出
问题
基于此,我认为最好的聚集键将在每个表的 [ ShowId, id ] 上。但是然后,阅读this 文档,我怀疑考虑到插入的数量,这是否不会使情况变得更糟,或者是否因为插入是在同一个 ShowId 上进行的,所以可以。
我无权访问 PRD 数据库,也无权访问它的副本进行测试。我使用 dev 数据库进行了测试,但它太小了,似乎根本没有任何影响。
有人可以帮忙吗?
【问题讨论】:
-
有什么问题?
-
更多的是设计问题...您没有得到什么?
-
插入率是多少
-
相当高...作业和算法运行时间或多或少 5 分钟...所以 30k+ 插入 / 5 分钟...“显示创建”在几秒钟内运行并生成类似40k 行...
-
所有索引都会导致 DML 开销(插入、更新、删除)。您需要评估这些操作的性能增益是否值得开销。因此,如果您的表没有过度索引,并且您通过索引获得了性能优势,它不会影响它。
标签: sql-server database clustered-index