问题描述
我有2对父表和子表,1对存储在一个聚集对象中,另一个是非聚集的。子表中的主表 (即外键) 的主键被聚集。还将创建群集上的索引。
2个父表的结构相同,2个子表的结构也相同。2对中的记录也相同。
我想为SELECT语句测量聚集表与非聚集表的性能增益。
我正在使用设置定时,并在表上执行选择后打印经过的时间。SELECT语句也是相同的。我一直期望群集表的经过时间少于非群集表。但事实并非如此。你能解释一下吗?
另外,还有其他方法可以使用自动跟踪或explain plan来衡量非群集与群集的性能吗?
2个父表的结构相同,2个子表的结构也相同。2对中的记录也相同。
我想为SELECT语句测量聚集表与非聚集表的性能增益。
我正在使用设置定时,并在表上执行选择后打印经过的时间。SELECT语句也是相同的。我一直期望群集表的经过时间少于非群集表。但事实并非如此。你能解释一下吗?
另外,还有其他方法可以使用自动跟踪或explain plan来衡量非群集与群集的性能吗?
专家解答
如果不确切了解您所做的事情,很难解释产生效果的原因!
还有no保证更改群集将使查询更快。这取决于数据,您的查询等。
因此,考虑到这一点,这里有一些事情要考虑:
如果你运行的语句很快 -- 比如不到十分之一秒 -- 你从调整物理层中获得的任何收益都是最小的。大部分处理时间将继续通过网络发送结果,将其显示在客户端等。
挂钟运行时间也可能受到当时系统上发生的其他情况的影响。例如,如果数据库服务器缺乏资源,则由于与调整无关的原因,您的查询将花费更长的时间。
更通用的度量是语句所做的逻辑I/o (缓冲区获取/一致读取) 的数量。你可以通过运行得到这个:
的Buffers顶行 (ID 0) 的列是查询 * 的总数。
比较这些不同的配置。通常,执行较少逻辑IO的查询会扩展得更好。
如果您想进一步挖掘,可以使用Tom的run_stats软件包来获取有关每个选项使用的资源的更多详细信息。
你可以在https://github.com/oracle-developer/runstats
* 假设没有标量子查询。
还有no保证更改群集将使查询更快。这取决于数据,您的查询等。
因此,考虑到这一点,这里有一些事情要考虑:
如果你运行的语句很快 -- 比如不到十分之一秒 -- 你从调整物理层中获得的任何收益都是最小的。大部分处理时间将继续通过网络发送结果,将其显示在客户端等。
挂钟运行时间也可能受到当时系统上发生的其他情况的影响。例如,如果数据库服务器缺乏资源,则由于与调整无关的原因,您的查询将花费更长的时间。
更通用的度量是语句所做的逻辑I/o (缓冲区获取/一致读取) 的数量。你可以通过运行得到这个:
alter session set statistics_level = all; set serveroutput off select * from ...; select * from table(dbms_xplan.display_cursor(null, null, 'IOSTATS LAST'));
的Buffers顶行 (ID 0) 的列是查询 * 的总数。
比较这些不同的配置。通常,执行较少逻辑IO的查询会扩展得更好。
如果您想进一步挖掘,可以使用Tom的run_stats软件包来获取有关每个选项使用的资源的更多详细信息。
你可以在https://github.com/oracle-developer/runstats
* 假设没有标量子查询。
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




