1. 程式人生 > >oracle 排序原理(自己理解不一定準確)

oracle 排序原理(自己理解不一定準確)

oracle 中存在SGA和PGA ,PGA中有一個結構 sort_area

也就是說排序的時候會在PGA中執行。

那麼問題來了

臨時表空間中也會存放排序資料,也會進行排序。那麼什麼情況下使用臨時表空間?

PGA的sort_area_size的大小決定排序能否在PGA中完成?

SQL>show parameter sort_


NAME_COL_PLUS_SHOW_PARAM                                                         TYPE        VALUE_COL_
-------------------------------------------------------------------------------- ----------- ----------
sort_area_retained_size                                                          integer     0
sort_area_size                                                                   integer     65536

那麼在amm下,這個引數的值會不會增加呢?

最大多少,能達到pga_aggregate_target 的值麼

SQL>show parameter pga


NAME_COL_PLUS_SHOW_PARAM                                                         TYPE        VALUE_COL_
-------------------------------------------------------------------------------- ----------- ----------
pga_aggregate_target                                                             big integer 200M

如果pga的sort_area夠用在pga中完成排序沒有什麼好說的,

如果pga的sort_area不夠用,那麼排序就會用到臨時表空間或永久表空間儲存臨時資料。

如果排序很大,可能直接完全在臨時表空間內完成所有排序麼?

臨時表空間屬於硬碟,pga屬於記憶體,兩者的效率差很多的。

實際上即使排序所需空間很少也可能會直接使用臨時表空間,而不在PGA中排序(參考one-pass排序)。