数据库理论(二)——索引与视图
数据库理论(二)——索引与视图
数据库对象
表(tables):关系在数据库中的表现形式
视图(Views):虚表,从一个或者多个table中导出的,数据库中存放视图的结构而不存放视图对应的数据,可以基于存在的视图定义新的视图。
索引(index):一种特殊的存储结构,伴随基本表存在,是基本表中若干属性(组)的有序结构;用于加快数据库的查询速度。
1个关系数据库实例->多个数据库
1个数据库->多个模式
1个模式->多个表,视图,索引等数据库对象
创建和删除数据库
1 | -- 创建数据库 |
模式的创建与删除
1 | -- 创建模式,作者是用户 |
表的创建,修改与删除
1 | -- 创建 |
属性的数据类型
数据类型 | 含义 |
---|---|
CHAR(n) | 长度为n的定长非Unicode字符串 |
VARCHAR(n) | 最大长度为n的变长非Unicode字符串 |
NVARCHAR(n) | 最大长度为n的变长Unicode字符串 |
INT | 长整数(也可以写作INTEGER) |
SMALLINT | 短整数 |
NUMERIC(p,d) | 定点数,由p位数字(不包括符号、小数点)组成,小数后面有d位数字 |
REAL | 取决于机器精度的浮点数 |
Double Precision | 取决于机器精度的双精度浮点数 |
FLOAT(n) | 浮点数,精度至少为n位数字 |
DATE | 日期,包含年、月、日,格式为YYYY-MM-DD |
TIME | 时间,包含一日的时、分、秒,格式为HH:MM:SS |
索引的建立与删除
索引:数据表中一个或多个列的一种有序(存储)结构。属于内模式
每个索引项都有一个特定的搜索码与表中的记录关联,索引按顺序存储搜索码的值。
策略:空间换时间
索引会占用额外的存储空间,降低插入删除和更新的速度,但是会提高查询速度
聚簇索引
- 表中数据的物理存储顺序按照索引键的排序次序存储
- 一个数据表只能建立一个聚簇索引
非聚簇索引
1 | -- 创建一个聚簇索引 |
视图的创建与删除
1 | create view 视图名 |
对视图进行修改,插入,删除就和操作表一样,因为视图消解策略会使得原来的表也进行相应的修改。
数据查询
1 | select [关系名称,算术表达式,字符串常量,函数] from 表名 |
并:select A union select B
差:select A except select B
交:select A intersect select B
笛卡儿积:select A.a,B.b from A,B
自然连接:select A.a,B.b from R join S on A.c=B.c
去重:distinct
排序:order by 属性名
聚集:group by 属性名
聚集附加条件:having
是否为空:is null
聚集运算:
like的通配符
使用通配符时需要用引号引入
a%m:表示以字母a开头,字母m结尾的所有字符串
张_:姓张,且仅由一个字的名,如张三,张B可以,但是张sc,张器才,就不行
_S%T:第二个字母是S,以T结尾
插入
1 | -- 插入 |
代数优化的启发式规则
- 选择运算应尽可能先做
- 投影运算和选择运算同时进行
- 如果有若干个投影和选择运算,并且他们都是对同一个关系操作,则可以在扫描此关系的同时完成所有的这些运算,以避免重复扫描关系
- 把投影同其前或其后的双目运算结合起来
- 把某些选择同在它前面要执行的笛卡儿积结合起来成为一个连接运算符
- 找出公共子表达式,避免重复计算
举个例子:
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ZeroRains Blog!