innodb 是行级锁,myisam是表级锁,频繁写用innodb 频繁读用myisam innodb 支持事务,myisam不支持事务 innodb 支持外键,myisam不支持外键 myisam的索引以表名+.MYI文件分别保存。 innodb的索引和数据一起保存在表空间里
配置query_cache_type
值 | 效果 |
---|---|
0 | 不使用缓存 |
1 | 始终使用缓存 |
2 | 按需使用缓存 |
低级别的隔离级别一般支持更高的并发处理,并拥有更低的系统开销
(1)所有的事务都可以看到其他未提交事务的执行结果
(2)本隔离级别很少实际应用,因为他的性能不必其他级别好多少
(3)该级别引发的问题是---脏读(dirty read)读取到了未提交的数据
比如事务A读到了事务B还未提交的内容
(1)这是大多数数据库系统默认的隔离级别(但不是mysql默认的)
(2)一个事务只能看见已经提交的事务所做出的改变
(3)这种隔离级别出现的问题是--不可重复读:不可重复读意味这我们在同一个事务中执行完全相同的select语句时可能看到
不一样的结果。有一个交叉的事务有了新的commit,导致了数据的改变;(一个数据库被多个实例操作时,同一个事务的其他实力在该实例处理期间可能会有新的额commit)
(1)这是mysql 默认事务的隔离级别
(2)它确保同一事务的多个实例在并发读取数据时,会看到同样的数据行
(此级别可能出现的问题,幻读)当用户读取某一范围的数据行时,另一个事务又在该范围内插入了新行。当用户再读取该范围的数据行时,会发现有新的“幻影行”
(4)innodb 和falcon存储引擎通过多版本并发控制(mvcc)机制解决了该问题;
(1)这是最高的隔离级别
(2)它过强制事务排序,使之不可能互相冲突,从而解决了幻读的问题,简而言之,他是在每个读的数据行上加上了共享锁。
(3)在这个级别,可能导致大量的超时现象和锁竞争
事务的四大特性:
原子性,一致性,隔离性,持久性
第一范式:数据表的每一列都要保持他的原子特性,也就是列不能再分割
第二范式:属性必须完全依赖于主键,有主键,非主键字段依赖于主键
第三范式:每列都于主键有直接关系不存在传递依赖
BC范式 主属性不依赖于主属性;
(1)单列索引,普通索引,唯一索引,主键索引,组合索引,全文索引(只支持myisam),和空间索引(myisam)
组合索引遵循左前缀原则;
B+Tree 结构都可以用在myisam 和innodb上。
(1)myisam的是非聚簇索引,B+Tree的叶子节点上的data ,并不是数据本身,而是数据存放的地址,主索引和辅助索引没啥区别,只是主索引中的key一定是唯一的,这里的索引都是非聚簇索引,两颗b+树看上去没有什么不同,主键索引的树存储的是主键,辅助索引的树存储的键是辅助键。
innodb使用的是聚簇索引,将主键组织到一颗B+树中,而数据就叶子结点的data上。
聚簇索引的数据物理存放位置与索引的顺序是一样的,只要索引是相邻的,那么数据一定也是相邻的存放在磁盘上,聚簇索引的查询效率比非聚簇索引的查询效率要高的多,
非聚簇索引
(1)未使用左前缀
(2)类型转换 字符串要使用引号
(3)搜索一个索引而在另一个索引上做了order by 操作
(4)在索引列上的操作使用MySQL的函数