Mysql小记innodb和myisam

newCacheThreadPool没有核心线程都是非核心线程且非核心线程非常多所以在队列里的任务执行的非常快
newFixedThreadPool只有核心线程所以执行比较慢
newsingethreadExector 只有一个核心线程所以非常慢


newCache不会oom cpu会爆满 因为非核心线程(worker)多能执行
其他两个会oom内存溢出 因为队列可能爆满 处理不了那么多


这里有一个 提交优先级和执行优先级
提交优先级是1.核心 2.队列3.非核心
执行优先级是1.核心 2.非核心3.队列


innodb的索引是聚集索引,索引的储存方式是b+树(也有hash),每个节点都是主键索引,每个叶子节点都包含了主键和其数据。就像是图书馆的书架上的标号,那一层的书(数据)都在。如果搜索某个节点(索引)就可以连着数据一起找到,一层一般有16kb。深度3层就可以储存千万数据,查找也快


Myisam是非聚集索引,就是非主键类型索引,每个节点都带有非主键索引和其主键,非聚集索引就是数据不在一起的只有主键在一起,就像是图书馆的手册去找书,找到记录,然后再去找一样。查找某个节点,找到之后根据主键还要查找一次。相当于两次。

hash只适合精确查找,b+tree适合范围查找,因为叶子层是有序的。


为什么建议设置主键索引,而且是整形自增,而不是UUID呢?
1.因为如果不设置显示的主键索引,innodb就会自动为你找到数据元素不重复的一列作为索引,如果没有就会为你增加一列6个字节的整形来作为主键索引。
2.整形的话方便进行排序比较方便范围查询,自增的话就是插入删除都会在叶子节点的末尾进行。不是自增的话,比如插入一个元素,可能会改变表结构导致重构表结构,导致大量运算。
3.UUID是不重复字符串,不方便比较,比较起来也非常麻烦,范围查找以及插入等等都非常不方便!



关于两个表引擎的差别
innodb 有行锁表锁外键支持事务
Myisam 有表锁 不支持事务外键 有计数器
行锁 开销大 会导致死锁 不会锁冲突 粒度小 并发度高
表锁 开销小 不会死锁 容易锁冲突 粒度大 并发度低
单线程且不需要事务就用Myisam
读频繁就用Myisam 读写频繁就用innodb
恢复起来麻烦Myisam select操作快因为有行计数器
+++++++++++++++++++++++++++++++++++++++++++++++++
乐观锁:每一次拿数据都默认不会修改数据,不加锁,不过在每一次更新数据时比较一下里面的字段,判断是否修改。
悲观锁:每一次拿数据都认为会修改数据,每一次都加锁。

=====
数据库设计的三大范式
1.原子性。数据库所有字段都是不可分割的字段。
2.所有非主键属性都完全依赖主键
3.所有非主键属性都不依赖其他非主键属性

ACID
原子性 不可分割 要么成功 要么失败
一致性 修改前 修改后 完全一致
持久性 数据保存后是持久的不会变化的
隔离性 多个事务之间是相互隔离的不会互相影响

数据库的隔离级别
1.transactionDefination-Islation-default默认
2.transactionDefination-Islation-read_uncommit 脏读幻读重复读
3.transactionDefination-Islation-read_commit 幻读重复读
4.transactionDefination-Islation-repeatable_read 重复读
5.transactionDefination-Islation-serilaziable 最高级别都防

事务传播
与当前事务有关
transactionDefination-propagation-required 有事务就进入 没有就开启新事务
transactionDefination-propagation-support 有事务就进入 没有就以非事务进行
transactionDefination-propagation-mandary 有事务就进入 没有就异常
与当前事务无关
transactionDefination-propagation-require-new 挂起当前事务,然后自己以事务进行
transactionDefination-propagation-not-support 以非事务进行,有当前事务就挂起
transactionDefination-propagation-never 以非事务进行,有当前事务就爆异常

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值