gpt4 book ai didi

性能调优 - 分区表与非分区表的查询

转载 作者:行者123 更新时间:2023-12-04 03:11:50 26 4
gpt4 key购买 nike

我有两个查询,其中一个查询涉及查询中的分区表,而另一个查询是相同的,只是它涉及非分区等效表。原始(非分区表)查询比分区查询执行得更好。我不确定如何为此隔离问题。查看执行计划,我发现使用的索引与两个查询相同,并且新查询在其执行计划中显示了 PARTITION RANGE 子句,这意味着正在进行分区修剪。查询的形式如下:-

Select rownum, <some columns> 
from partTabA
inner join tabB on condition1
inner join tabC on condition2
where partTabA.column1=<value> and <other conditions>
and partTabA.column2 in (select columns from tabD where conditions)

其中 partTabA 是分区表,partTabA.column1 是分区键(范围分区)。在原始查询中,这被同一个表的非分区等效项所取代。我应该查看哪些参数以找出新查询执行不佳的原因。我拥有的工具是 Oracle SQL Developer。

最佳答案

PARTITION RANGE ITERATOR 并不一定意味着正在进行分区修剪。您还需要查看解释计划中的 PstartPstop,以了解正在使用哪些分区。

分区查询会变慢的潜在原因有几个,即使它正在读取相同的数据。 (假设分区查询没有正确修剪,而是从整个表中读取。)

  1. 从多个本地索引中读取可能比从单个更大的索引中读取效率低得多。
  2. >较大的初始段大小、大量分区等可能会浪费大量空间。将段大小与此进行比较:select * from dba_segments where segment_name in ('PARTTABA', 'TABA'); 如果这是问题所在,您可能需要查看您的表空间设置,或使用延迟段创建。

关于性能调优 - 分区表与非分区表的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12711094/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com