1. 临时文件的使用场景
- 临时文件:
-
- 假设select语句中具有order by或group by子句,且不能通过索引去排序的sql会使用临时文件
- select语句通过unique和distinct排除重复的记录
- select语句通过使用sort merge连接,使用不到索引的会使用临时文件
- hash join 需要创建hash
- 创建索引时需要对键值排序
- 热恢复时,需要存放路基日志文件的临时文件
2. 临时表的使用场景
- select语句使用into temp子句
- 程序使用create temp table
- 应用程序向存储过程传递blob数据,或给全局的blob变量赋值
3. 关于临时文件存放的sql
以下的基础上都是在不记日志的基础上,假如数据库记录日志,只有sql明确写明不记录日志才会在临时的数据空间,否则将会写在rootdbs
#记录日志的数据库,且已经配置了dbspacetemp的参数
#存放在rootdbs
select number from tablename into temp tp;
#存放在临时数据空间
select number from tablename inot temp tp with no log;
#create temp table 也是如此,需要明确说明不记录日志
4. 关于临时文件存放位置的参数
- 临时文件可以存放在操作系统的文件夹下和dbspace上两种位置,各位置的存放规则如下:
-
- PS0RT_DBTEMP:这个参数是控制存放在操作系统文件夹路径的,同时需要在操作系统的环境变量中设置,如果设置了环境变量这个参数,临时文件将会根据这个环境变量指定位置进行存放
-
-
- 而且这个环境变量可以配置多个文件夹值,如果多个文件夹,将会使用轮询的规则进行存放,第一个文件放在第一个文件夹下,第二个文件存放在第二个文件夹下
-
-
- 存放在dbspace上的参数配置:分为环境变量设置、DBSPACETEMP参数设置和默认三种
-
-
- 环境变量的方式:参数DBSPACETEMP,如果没有PSORT_DBTEMP环境变量,将会检索此环境变量,存放在数据空间上
- DBSPACETEMP参数设置:如果环境变量没有设置将会根据此参数设置的数据空间进行存放
- 默认值:如果环境变量和参数中都没有进行设置,临时文件的存放位置,将会放下/tmp下
-
5. 临时表的位置存放
临时表的位置存放将会有三种配置,环境变量配置、参数配置和其他默认值
- 环境变量配置:临时表会自动创建在一个dbspace上,DBSPACETEMP环境变量可以设置一个或多个dbspace,且环境变量是第一优先级
- 参数:如果环境变量没有设置,则会检索参数配置,DBSPACETEMP参数指定的dbspace是创建数据表时的dbspace
- 默认值:如果上述两个位置都没有指定,则根据语句进行划分
-
- create temp table:创建在数据库所在的dbspace
- select* from tab into temp:创建在rootdbs数据空间