TOAST行外存储、(集合运算、子查询、伪列)、单行与多行函数

TOAST行外存储

1、普通数据行的存储技术。

(1)KES数据块是数据文件存储中的基本单位默认的大小为8KB

(2)KES不允许一行数据跨块存储。

(3)KES无法直接存储非常大的字段值

2、TOAST主要用于存储一个大字段的值。

(1)TOAST是超尺寸属性存储技术的缩写。

(2)TOAST技术将大型字段值压缩或切片成多个物理行,这种存储方式叫行外存储。

3、TOAST适用场景

 

 

  1. 主表的content字段,不存储任何实际值,只存储Toast Pointer。
  2. Toast Pointer 指向【TOAST表】
  3. 【TOAST表】中存储的是【行外值】
  1. 【行外值】分裂成2k每个块【chunk_data】
  2. 【chunk_data】最大为TOAST_MAX_CHUNK_SIZE (2K)。
  3. 【chunk_data】作为独立的行存储在从属于所属表的TOAST表中。
  1. 如果一个表中有任何一个列使用了TOAST技术,那么该表将有一个与之关联的TOAST表。
  2. TOAST表的字段说明

 

  1. TOAST表的索引说明

在chunk_id和chunk_seq上有一个唯一索引,提供对值的快速检索。

 

优点:

  1. 可以存储超长超大字段,避免之前不能直接存储的限制。
  2. select 语句使用较短的键值进行匹配的,那么执行器的大多数工作都将使用主表完成。
  3. TOAST在物理上与普通表是分离的,检索查询时不检索到大字段会极大地加快速度。

缺点:

  1. 大字段的索引创建,有可能会失败。
  2. 大字段的更新慢。

集合运算、子查询、伪列

集合运算操作符概述

两个结果集做集合运算

例如:

SELECT ino,title from exam.instructor

EXCEPTUNIONUNIONALLINTERSEC

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函数分类

 

使用分组函数的注意事项

多列组合分组

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黑马金牌编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值