数据库的三级模式:
模式:是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图
外模式:用户模式,他是数据库用户能够看见和使用的局部数据的逻辑结构和特征描述,与某一应用有关,保证数据库安全的一个强有力的措施
内模式:又称存储模式,他是描述数据物理结构和存储方式的描述
外模式/模式:保证了数据与程序的逻辑独立性(指当总体逻辑结构改变,通过对映像的相应改变保持局部逻辑结构的不变,从而能应用程序也可以不变)
模式/内模式:可以在内模式改变的情况下模式保持不变,从而应用程序也不必改变
MySQL是只支持一种JOIN算法Nested-Loop Join(嵌套循环链接)
1.定义
Nested Loops也称为嵌套迭代,它将一个联接输入用作外部输入表(显示为图形执行计划中的顶端输入),将另一个联接输入用作内部(底端)输入表。外部循环逐行消耗外部输入表。内部循环为每个外部行执行,在内部输入表中搜索匹配行。最简单的情况是,搜索时扫描整个表或索引;这称为单纯嵌套循环联接。如果搜索时使用索引,则称为索引嵌套循环联接。如果将索引生成为查询计划的一部分(并在查询完成后立即将索引破坏),则称为临时索引嵌套循环联接。伪码表示如下:
for each row R1 in the outer table
for each row R2 in the inner table
if R1 joins with R2
return (R1, R2)
三类:
1、Simple Nested-Loop Join(要对S表进行RN次访问,效率低下)
2、Index Nested-Loop Join(如果非驱动表的关联键是主键的话,这样来说性能就会非常的高)
3、Block Nested-Loop Join
Block Nested-Loop Join对比Simple Nested-Loop Join多了一个中间处理的过程,可以将多次比较合并到一次,降低了非驱动表的访问频率,在MySQL当中,我们可以通过参数join_buffer_size来设置join buffer的值,然后再进行操作
三种范式:
第一范式:字段不可分(通俗理解即一个字段只存储一项信息)
第二范式:又逐渐,非主键字段依赖主键(通俗理解是任意一个字段都只依赖表中的同一个字段)
第三范式:非主键字段不能相互依赖(一张表最多只存两层同类型信息)
1NF:原子性,字段不可再分(所以会存在插入时异常)
2NF:唯一性,一个表只能说明一个事物
3NF:每列都与主键有直接关系,不存在传递依赖
反三范式
有时为了提高运行效率,提高读性能,就必须降低范式标准,适当保留冗余数据。
降低范式就是增加字段,减少了查询时的关联,提高查询效率,因为在数据库的操作中查询的比例要远远大于DML的比例