TOAST行外存储
1、普通数据行的存储技术。
(1)KES数据块是数据文件存储中的基本单位,默认的大小为8KB。
(2)KES不允许一行数据跨块存储。
(3)KES无法直接存储非常大的字段值。
2、TOAST主要用于存储一个大字段的值。
(1)TOAST是超尺寸属性存储技术的缩写。
(2)TOAST技术将大型字段值压缩或切片成多个物理行,这种存储方式叫行外存储。
3、TOAST适用场景
- TOAST存储方式解析
- 主表的content字段,不存储任何实际值,只存储Toast Pointer。
- Toast Pointer 指向【TOAST表】
- 【TOAST表】中存储的是【行外值】
- 【行外值】分裂成2k每个块【chunk_data】
- 【chunk_data】最大为TOAST_MAX_CHUNK_SIZE (2K)。
- 【chunk_data】作为独立的行存储在从属于所属表的TOAST表中。
- 如果一个表中有任何一个列使用了TOAST技术,那么该表将有一个与之关联的TOAST表。
- TOAST表的字段说明
- TOAST表的索引说明
在chunk_id和chunk_seq上有一个唯一索引,提供对值的快速检索。
- 计算toast空间用到的内置函数
- TOAST的优势与缺点
优点:
- 可以存储超长超大字段,避免之前不能直接存储的限制。
- select 语句使用较短的键值进行匹配的,那么执行器的大多数工作都将使用主表完成。
- TOAST在物理上与普通表是分离的,检索查询时不检索到大字段会极大地加快速度。
缺点:
- 大字段的索引创建,有可能会失败。
- 大字段的更新慢。
集合运算、子查询、伪列
集合运算操作符概述
两个结果集做集合运算
例如:
SELECT ino,title from exam.instructor
EXCEPT(UNION、UNIONALL、INTERSEC)
SELECT ino,title FROM exam.instructor_history;
子查询
单行子查询
例如:查询考试成绩为97的学员信息
select 字段
from exam.student #学员成绩表查学员信息
where sno=(select sno from exam.score where score=97);#子查询里查询成绩
示例2:查询考试分数最低的学员信息
select 字段 from exam.student where sno=(select sno from exam.score where score = (select min(score) from exam.score ));
多行子查询
示例:查询所有与学号为1001、1008的学员在同一个公司的学员信息
select 字段 from exam.student where company IN(select company from exam.student where sno=1001 or sno=1008); #使用IN可以返回多个结果
示例:查询比初级考试成绩中的最低分数要高的其他级别的考试成绩信息。
单行与多行函数
SQL函数分类
使用分组函数的注意事项
多列组合分组