oracle. order by子句和缓冲区获取(逻辑IO)计数

utugiqy6  于 2023-10-16  发布在  Oracle
关注(0)|答案(2)|浏览(92)

enter image description here x1c 0d1x表有37个块。
enter image description here

select * from warehouses --> 48 consistent gets
enter image description here

select * from warehouses order by 2 --> 38 consistent gets
请告诉我为什么不同?

bzzcjhmw

bzzcjhmw1#

当按列2排序检索数据时,数据可能更好地聚集在该高速缓存中,从而需要更少的读取。

wvyml7n5

wvyml7n52#

有(至少)两个可能的原因的差异。
首先,consistent gets包括Oracle在解析查询时执行的任何gets。如果每个查询运行两次,并比较第二次运行的结果,就可以消除差异的来源。
其次,{order by 2}查询意味着从排序区域获取结果。这些获取不会算作一致的获取,这是有序查询报告的获取较少的主要原因。
在SQL*Plus中,您可以使用

set arraysize nnnn;  <== nnnn is an integer

如果将arraysize设置为匹配或超过行数;您将在每个查询的一致获取之间获得非常接近(如果不是精确匹配)的结果。
如果你将数组大小设置为1(如果你有很多行,请小心--非常慢!!!)你会看到一个巨大的差异得到使用。无序查询每行有+1个get,而有序查询则没有。

相关问题