gpt4 book ai didi

sql-server - 大型数据库表的 SQL Server 自动分区

转载 作者:行者123 更新时间:2023-12-02 00:43:47 25 4
gpt4 key购买 nike

我正在处理具有数千万行的数据库表(随着时间的推移可能会达到数亿行),并且正在考虑实现数据库分区以尝试在行数增加时保持性能稳定。这就是我想要做的:

假设我有一张存放动物的 table 。其中一个字段是 AnimalType(即鸟/鱼/猫/狗)。我希望每个 AnimalType 都是一个单独的分区,因为 99% 的查询只与一个 AnimalType 相关并且表中的 AnimalTypes 数量大致相等(即 1000 条鱼、1000 只鸟、1000 条狗)所以这意味着分区应该很好并且均匀分布。然而,有很多的动物类型,我不想去手动为每个动物类型创建数百个分区,然后每次输入一个新的动物类型都必须创建一个新的分区。

因此,我想要的是告诉 SQL Server 基于 AnimalType 进行分区的某种方式。如果 AnimalType 已有一个分区,请使用该分区,否则 SQL Server 将自动创建一个新分区。

这听起来很简单,但我似乎无法找到一种方法来做到这一点。可能吗?

或者,还有哪些其他方法可以保持表访问速度又好又快?我想避免任何只是手动将内容移动到更多表中的事情,例如将旧记录移动到历史样式表中,因为查询有可能需要来自完整数据集的数据,因此这实际上不会帮助。我已经有了一些非常有用的基本索引。

最佳答案

分区是存储问题的解决方案,即。根据某些字段值确定位于哪些文件组数据。就其本身而言,它并没有带来真正的性能优势,事实上,它实际上在大多数时候都会减慢查询速度,因为需要添加新的分区位置运算符。强制查询只考虑一个分区的唯一方法是 $PARTITION语法,这不能在现实世界的应用场景中使用。选择仅查找一个分区的查询仅基于索引范围执行此操作,并且将扫描完全相同数量的记录(无论是否分区)。

分区具有性能优势的唯一时间是管理事件,例如分区切入和切出表或批量导入操作。

性能优势只能来自适当的索引和精心设计的查询。

关于sql-server - 大型数据库表的 SQL Server 自动分区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1634986/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com