sql-server - SQL Server 分区是否会在不更改文件组的情况下提高性能

标签 sql-server performance partitioning

场景我有一个 1000 万行的表。我将它分成 10 个分区,这导致每个分区有 100 万行,但我没有做任何其他事情(比如将分区移动到不同的文件组或心轴)

我会看到性能提升吗?这实际上就像创建 10 个较小的表吗?如果我有执行键查找或扫描的查询,性能是否会提高,就好像它们是针对一个小得多的表进行操作一样?

我正在尝试了解分区与仅拥有一个索引良好的表有何不同,以及它可以在哪些方面用于提高性能。

将旧数据(使用分区切换)从主表移动到只读存档表是否更好?

拥有一个包含 100 万行分区和 900 万行分区的表是否类似于(性能方面)将 900 万行移动到另一个表并在原始表中仅保留 100 万行?

最佳答案

分区不是性能特征,而是用于维护操作,例如在表之间移动数据和真正快速地删除数据。将一个 1000 万行的表分成 10 个分区,每个分区有 100 万行,这不仅不会提高大多数查询的性能,而且可能会使其中的一些查询变慢

除非可以确定查询只需要该分区中的行,否则任何查询都不能对单个分区的较小行集进行操作。但是,通过在表上正确选择聚簇索引,或者至少选择一个良好的覆盖非聚簇索引,总是可以解决这个问题,而且效果会好得多。

关于sql-server - SQL Server 分区是否会在不更改文件组的情况下提高性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2701143/

相关文章:

SQL Server 架构最佳实践

performance - 优化 Netlogo 代码 - 每次运行的刻度太多?

performance - 优化 Erlang 进程的性能

sql-server - SQL Server 2005 按外部引用数据分区表

sql-server - 字符串列数据的数值比较

sql-server - 无法从另一个 SQL Server 连接到 SQL Server 命名实例

c++ - 进程数量增加导致 MPI 性能损失

python - 使用 dask.dataframe.to_parquet() 进行分区时丢失索引信息

linux - Debian 分区 - 数据库在哪个分区?

c# - 在客户端和服务器之间保护用户名/密码的最佳实践