事务隔离级别
并行事务的四大问题:
1.更新丢失:和别的事务读到相同的东西,各自写,自己的写被覆盖了。(谁写的快谁的更新就丢失了)
2.脏读:读到别的事务未提交的数据。(万一回滚,数据就是脏的无效的了)
3.不可重复读:两次读之间有别的事务修改。
4.幻读:两次读之间有别的事务增删。
对应隔离级别
1.READ UNCOMMITTED:不处理。
2.READ COMMITTED:只读提交的数据,无脏读;
3.REPEATABLE READ:加行锁,两次读之间不会有修改,无脏读无重复读;
4.SERIALIZABLE:加表锁,全部串行,无所有问题。
索引
mysql采用MyISAM的存储引擎,以b-树作为索引结构。另一个引擎InnoDB用b+树索引。
m阶的b-树主要特性:
1.非叶子结点的儿子数为[M/2, M];
2.每个结点存放至少M/2-1(取上整)和至多M-1个关键字;
3.所有叶子在同一层
b-树是多叉搜索树,通过分层查找,插入需要分裂算法(1.先放入叶子层位置.2发现叶子层元素数达到了m,则从中间分裂,最中间数字分裂到父节点。3递归检查父节点)。删除节点分多种情况(直接删除,替换,合并都有可能)。
b+树与b-树的主要区别:1.非叶子节点一个关键字对应一个孩子节点,且只用来索引 2.所有关键字都在叶节点出现
索引可以是单列索引,也可以是多列索引,默认主键即为索引列,总之同一层的数据是有序的。
查看当前索引:SHOW INDEX FROM employees.titles
查看当前语句使用索引情况: explain select
根据最左前缀匹配原则:
1.多列索引,从第一匹配条件到连续匹配条件可以进入索引,中间有列不在索引条件中则后面条件都无效。(mysql会对where条件自动按照索引顺序排序)
2.Like条件索引,只有在%不出现头部才会索引。
3.><范围列只有第一个可以用索引,后面均无效