我在数据库上实现了数据库分区。分区由DBMS_REDEFINITION完成。我想到的问题是,当我们从表中执行select *语句时,分区是否会影响性能。
提示:我们正在选择表格的整个数据
select * from Non_Partitioned_table
和select * from Partitioned_table
之间的区别是什么?
答案 0 :(得分:0)
分区不太可能对select * from table_name;
它不会有助于提升表现。
关于分区的一个常见误解是简单地将表分成块可以提高性能。除非您利用特定的分区功能,例如分区修剪或分区连接,否则让Oracle更好 决定如何划分工作。例如,通过并行处理,Oracle可以轻松地将工作分为block range granules而不是分区粒度。
它可能不会影响性能。
解析会带来额外的开销;收集和分析更多元数据,评估更多优化器决策。在实践中,我从未注意到仅仅通过分区的显着差异。我确实看到了一些复杂的分区修剪决定的异常行为,但这与这个简单的陈述无关。
还有一些额外的数据需要阅读;更多细分可能意味着更多的浪费空间。实际上,使用默认值和正常数量的分区,这个额外的开销并不是什么大问题。特别是deferred segment creation,其中空分区占用0个字节。虽然该功能仅适用于以11.2.0.2开头的分区。
但在某些极端的例子中, 的内容可能会非常糟糕。例如,如果设置较大且统一的扩展区大小,或禁用延迟段创建,或创建一个包含数千个分区的表,每个分区只有一行。在这种情况下,一个简单的select语句可能需要几分钟而不是几分之一秒。
答案 1 :(得分:0)
在查询中没有“ Where子句”之前,分区表和未分区表之间没有区别。 分区将在您对表进行分区的条件下工作。 例如,当您按日期对表进行分区时,将影响where子句中具有日期条件的每个查询。