所以,对于一个数据集,我有两个表,分别是未分区表和分区表。当我看到分区数据的报告时,累计cpu时间显著减少,但所花费的总时间与未分区数据相同。为什么会这样?
ffx8fchx1#
因为这是一个严格的理论问题,你会得到一个严格的理论答案。分区导致表被拆分为具有相同结构的较小表。这让你的 SELECT 在不同表上执行的查询(有效 SELECT * FROM table_part1 UNION ALL table_part2 与 SELECT * FROM table ).总的时间将是相同的,因为您正在读取相同数量的数据。你可以把 table_part1 以及 table_part2 在不同的物理磁盘上,这可能会使读取速度更快,因为您将有更少的io等待。但一般来说,对于在同一表空间中分区的表,您将看到两个查询(分区和未分区)的时间相当。至于cpu,我们可以推测有一些优化,使操作更小的表更容易。分区表可能更适合内存(包括cpu缓存)。在这种情况下,结果可能取决于初始表和分区表的大小—对于两侧的超大表,无论哪种方式,最终的cpu负载都可能相同。
SELECT
SELECT * FROM table_part1 UNION ALL table_part2
SELECT * FROM table
table_part1
table_part2
1条答案
按热度按时间ffx8fchx1#
因为这是一个严格的理论问题,你会得到一个严格的理论答案。分区导致表被拆分为具有相同结构的较小表。这让你的
SELECT
在不同表上执行的查询(有效SELECT * FROM table_part1 UNION ALL table_part2
与SELECT * FROM table
).总的时间将是相同的,因为您正在读取相同数量的数据。你可以把
table_part1
以及table_part2
在不同的物理磁盘上,这可能会使读取速度更快,因为您将有更少的io等待。但一般来说,对于在同一表空间中分区的表,您将看到两个查询(分区和未分区)的时间相当。至于cpu,我们可以推测有一些优化,使操作更小的表更容易。分区表可能更适合内存(包括cpu缓存)。在这种情况下,结果可能取决于初始表和分区表的大小—对于两侧的超大表,无论哪种方式,最终的cpu负载都可能相同。