分区对下面的查询有什么影响"选择*来自Table_name"

时间:2014-08-22 06:25:26

标签: sql oracle oracle11g database-partitioning

我在数据库上实现了数据库分区。分区由DBMS_REDEFINITION完成。我想到的问题是,当我们从表中执行select *语句时,分区是否会影响性能。

提示:我们正在选择表格的整个数据

select * from Non_Partitioned_tableselect * from Partitioned_table之间的区别是什么?

2 个答案:

答案 0 :(得分:0)

分区不太可能对select * from table_name;

等查询产生任何影响

它不会有助于提升表现。

关于分区的一个常见误解是简单地将表分成块可以提高性能。除非您利用特定的分区功能,例如分区修剪或分区连接,否则让Oracle更好  决定如何划分工作。例如,通过并行处理,Oracle可以轻松地将工作分为block range granules而不是分区粒度。

它可能不会影响性能。

解析会带来额外的开销;收集和分析更多元数据,评估更多优化器决策。在实践中,我从未注意到仅仅通过分区的显着差异。我确实看到了一些复杂的分区修剪决定的异常行为,但这与这个简单的陈述无关。

还有一些额外的数据需要阅读;更多细分可能意味着更多的浪费空间。实际上,使用默认值和正常数量的分区,这个额外的开销并不是什么大问题。特别是deferred segment creation,其中空分区占用0个字节。虽然该功能仅适用于以11.2.0.2开头的分区。

但在某些极端的例子中, 的内容可能会非常糟糕。例如,如果设置较大且统一的扩展区大小,或禁用延迟段创建,或创建一个包含数千个分区的表,每个分区只有一行。在这种情况下,一个简单的select语句可能需要几分钟而不是几分之一秒。

答案 1 :(得分:0)

在查询中没有“ Where子句”之前,分区表和未分区表之间没有区别。 分区将在您对表进行分区的条件下工作。 例如,当您按日期对表进行分区时,将影响where子句中具有日期条件的每个查询。