查询整个 table VS 查询 table 的每个分区

Querying the entire table VS Querying each partition of the table

假设我有一个包含多个分区的 table,我需要从整个 table 中查询一些内容。从性能的角度来看,运行 整个 table 上的单个 sql 查询和每个分区上的 运行 一个 sql 查询之间是否存在差异?

LE:我正在使用 Postgres

在 Microsoft SQL Server 中,当您创建 partition function 用于分区 table 时,此函数会分区数据并将查询路由到最佳数据文件。

例如,如果您的分区函数每年在 datetime 字段和分区数据中创建,您的查询仅 运行 在包含 where 子句数据的单个数据文件中。

因此您不需要分离查询,SQL 服务器引擎会自动完成。

这取决于你的意图。

如果您已经有一个分区 table 并且正在决定检索所有行的最佳策略是什么,那么 运行 对分区 table 进行查询几乎肯定是更快的解决方案。

所有分区的检索很可能是并行的(取决于您的并行查询配置)。如果您手动查询每个分区,则需要自己实现,例如创建多个连接,每个连接 运行 对一个分区进行查询。


但是,如果您的目的是决定 分区 table 是否有意义,那么答案就不是那么简单了。如果您必须经常查询 table 的所有行,那么这通常(稍微)比查询单个未分区的 table 慢。如果那是例外,并且您几乎总是有 运行 个针对单个分区的查询,那么分区确实有意义。