mysql相关知识

事务。索引。sql优化。常见配置。存储引擎。mvcc。4个隔离级别。

mysql 事务

悲观锁:假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作
乐观锁:假设不会发生并发冲突,只在提交操作时检查是否违反数据完整性。

4个特性

  • 一致性
  • 原子性
  • 隔离性
  • 持久性

4个隔离级别(由低到高)

  • Read uncommitted

    一个事务可以读取另一个事务未提交的内容

  • Read committed

    一个事务要等到另一个事务提交后才能读到

  • Repeatable read

    可重复读

  • Serializable

    系列化,事务串行化顺序执行

存储引擎

MyISAM 适合于一些需要大量查询的应用,但其对于有大量写操作并不是很好。甚至你只是需要update一个字段,整个表都会被锁起来,而别的进程,就算是读进程都无法操作直到读操作完成。另外,MyISAM 对于 SELECT COUNT(*) 这类的计算是超快无比的。

InnoDB 的趋势会是一个非常复杂的存储引擎,对于一些小的应用,它会比 MyISAM 还慢。他是它支持“行锁” ,于是在写操作比较多的时候,会更优秀。并且,他还支持更多的高级应用,比如:事务。

索引

加速查询的数据结构。
B树 mongo的索引
B+树 mysql的索引

B+树特征
  • 每一个父节点的元素都会出现在子节点中,是子节点的最大(最小)元素, 所以所有的叶子节点包括了所有元素。
  • 有K个子树的中间节点包含K个元素(B树是K-1),每个元素不保存数据,只用来做索引。
  • 范围查询只需要遍历底层的链表即可,B树需要做中序遍历。

sql 优化

  • 对查询进行优化, 尽量避免全表扫描, 要考虑在经常查询的where 和 order by 上建立索引
  • 尽量避免在 where 字句中对字段进行 null 值判断
  • 尽量避免使用在 where 字句中使用 != , <> 操作符
  • 尽量避免使用 or
  • 尽量避免使用 in , not in
  • 索引固然可以提高相应的select 效率,但同时降低了 insert 和 update 的效率,因为有时有重建索引。

常见配置

  • max_connections (连接数)
  • query_cache (查询缓存)

MVCC 多版本并发控制

  1. 加入几列隐藏字段,数据行的版本号(db_trx_id),删除版本号(db_roll_pt)
  2. 在读取数据的时候,会有一个版本号,提交的时候会检查一个这个版本号,如果大于当初的就允许提交,如果小于,就认为是过期数据,不允许提交。
  3. 解决 写写 阻塞的问题。

你可能感兴趣的:(mysql相关知识)