调用所有MSSQL服务器专家! 我目前正在从事一个涉及具有以下布局的表的项目:
[DbNodeClosures]
[Id] BIGINT主键标识不为空,
[ParentID] BIGINT NOT NULL,
[ChildID] BIGINT NOT NULL,
[深度] INT不为空
这是用于存储父子关系的关闭表,当前具有以下索引:
[IX_DbNodeClosures_ParentID]开启[dbo]。[DbNodeClosures]([ParentID])
[IX_DbNodeClosures_ChildID]开启[dbo]。[DbNodeClosures]([ChildID])包括([Depth],[ParentID])
[IX_DbNodeClosures_ParentID-ChildID]开启[dbo]。[DbNodeClosures]([ParentID],[ChildID])包括([深度])
查询此表通常涉及使用parentID查询所有子ID,反之亦然。该表中的行仅被插入或删除,从不更新。目前,我们有6亿行记录正在运行,但性能仍然非常出色,但是我们将进入一个迁移期,该数量将超过12亿行,随着时间的推移,可能会增长到30+十亿行。当前表(包含索引)有6亿行,在我们的SQL Server上大约需要30 GB的存储空间。
现在是真正的问题:
这种缩放效果如何?
查询性能会随着行数的增加而降低吗?
随着行数的增加,插入和删除性能会大大降低吗?
我一直在研究诸如表分区(在所有版本的MSSQL Server 2016+上可用)和ColumnStore索引之类的选项,但是他们对它们没有任何实际经验,也没有对扩展MSSQL表的真实经验到数十亿行。 (是的,我们正考虑从NOSQL的规模扩展中获得全面的转换,但是从开发成本的角度来看,这将是非常昂贵的)我已经看到其他人(纳斯达克)能够获得500亿行,所以我认为这是有可能的,我希望对此领域有经验的人可以就他们在这些级别的SQL Server的性能和扩展方面所见之处提供一些见解。 感谢您的任何想法!