视图:
视图只是一个虚拟表(只包含表的结构),其本质是根据sql语句获取动态的数据集,并且为其命名,用户使用时只需要使用名称即可获得结果集,可以将结果集当做表来使用
注意: 当虚拟表只有一张表的数据时可以对表进行修改,而多表关联后无法修改数据,试图本身的效率并不高,且当表结构发生变化时,试图需要手动修改,扩展性差,
触发器:
触发器可以定制用户在对表进行增删改(没有查询)操作时前后的行为
注意: 触发器不能拿由用户主动执行,而是对表进行操作自动触发的,触发器是在数据库层面的操作,可以在业务逻辑中实现
存储过程:
包含了一系列可以执行的sql语句,存储过程放在MySQL中,通过调用他的名字可以执行其内部的sql,也可以提供对外接口
优点: 用于代替业务逻辑写的sql语句,实现程序与sql的解耦合,基于网络传输,传输别名的数据量小,直接传输sql的数据量大
缺点: 扩展功能不便
索引
索引: 是对数据库表中一列或者多列值进行排序的一种结构,只有当经常查询索引列中的数据时才需要在表上创建索引.索引占用磁盘空间,并且降低添加,删除和更新行的速度.但是缩影的查询速度快,慎用!
mysql的索引分类
主键索引(聚簇索引): 主键索引的叶子节点存储的是整行的数据
普通索引(非主键索引): 也被称为二级索引,叶子节点存放的是主键的值,使用普通索引查询时需要先找到主键,在通过主键索引搜索一次,此过程成为回表.(普通索引又有一种特殊情况,唯一索引,索引的字段可以为空,但是必须唯一)
联合索引: 多个字段上建立索引,在查询条件使用了创建索引的最左N个字段或者最左N个字符,索引才会被使用,遵循最左前缀
全文索引: myISAM引擎特有
数据库的读写分离
基本原理就是让主数据库处理事务性的增删改,而从数据库处理select查询操作,数据库的复制被用来事务性操作导致的变更同步到集群中的从数据库.读写分离是用来解决数据库的读性能瓶颈的
其实是将数据库分为了主从库,主库用来写数据,多个从库用来完成读数据的操作,主从库之间通过某种机制进行数据的同步 ,是一种常见的数据库结构
数据库分表:
把一张表按照一定的规则分解成不同的实体表,如水平划分和垂直划分
垂直切分: 把不同功能,不同模块的数据放到不同的表中,如果同一个模块的数据量太大就会存在性能瓶颈切分,垂直切分解决不了大表的瓶颈,如果一个功能中表的数据量过大,就要对该表进行切分,为水平切分
通俗理解: 垂直切分----分布不同的模块表. 水平切分-----分同一个模块下的多个表
分库: 将一堆数据放到不同的数据库中保存,上面说的都是在同一个数据库上,分库是分到不同的数据库
垂直分表: 经常查的字段放在一个表中
数据库锁的作用
行级锁 表级锁
一般是乐观锁,只有在修改时才加锁
加锁是实现数据库[并发控制]的一个非常重要的技术,当食物在对某一个数据对象进行操作时,先向系统发出请求,对其加锁,加锁后食物就对该数据对象有了一定的控制,在该事务释放锁之前,其他事物不能对此数据对象进行更新操作,在数据库中有两种基本的锁类型: 排它锁和共享锁.当数据对象被加上排它锁时,其他事务不能对它读取和修改.加了共享锁的数据对象可以被其他事务读取,但是不能修改.