分表技术
水平分表
水平分表,如一张表有很多条目(10万+),则可将其按容量1万进行划分出多个表,当要查询某个条目时,通过对主键id取模,确定数据在哪个表,然后查询
垂直分表(比较常用)
将一张表的全部字段分别存储到不同的表里边。在进行正常数据表操作的时候,不常用的字段也会占据一定的资源,可以把不常用字段给创建到一个专门的辅表中。
数据碎片与维护
在长期的数据更改过程中,索引文件和数据文件,都将产生空洞,形成碎片。
通过 optimize table 表名来清理碎片
或 alter table 表名 engine 原来的引擎; 也能达到清理的效果
范式
第一范式
(1)表的属性要具有原子性
(2)表不能有重复的列
只要是关系型数据库,就天然满足第一范式。
第二范式
属性必须完全依赖于主键。
不能存在完全相同的两条记录,通常是通过设置一个主键来实现,主键一般是非业务逻辑主键
第三范式
所有的非主属性不依赖于其他的非主属性,不存在传递依赖
反三范式
有时候基于性能考虑,需要有意违反三范式,以达到提高查询效率的目的。
视图
作用:简化查询 与 权限控制
语法:
创建视图
create view view_name as select 语句
删除视图
drop view view_name
修改视图
alter view view_name as select xxxx
查看视图
show tables;
权限控制
封闭表的权限,只开放对应的视图。
视图与表的关系
视图是表的查询结果,表的数据改变了,将影响视图的结果
视图的数据与表的数据是一一对应时,可以修改
视图的增删也会影响表,但视图并不是总能增删改的
对于视图insert还应注意,视图必须包含表中没有默认值的列