MySQL近日学习总结

2020-03-02  本文已影响0人  TUCJVXCB

架构

  1. MySQL架构可以分为两部分:Server层和存储引擎
  2. Server层包括 连接器,查询引擎,解析器,优化器,涵盖了MySQL的大多数核心服务功能,以及所有的内置函数。
  3. 存储引擎 负责数据的存储和提取。架构是插件式的,可以根据不同的需求选择不同的存储引擎。最常用的是MyISAM和InnoDB。

索引(Index)


EXPLAIN指令

possible_keys: 可能应用在这张表上的索引
keys: 应用在这张表上的索引
key_len: 索引中使用的字节数
ref:索引的哪一行被使用了
rows:大致估算出所需的记录所需要读取的行数
Extra:包含不合适在其他列但是和重要的信息


  1. 按锁的粒度:

    • 表锁

      1. 偏向MyISAM存储引擎,开销小,加锁快,无死锁,锁的粒度大,发生锁冲突的几率大,并发度低
      2. SQL:手动加锁:lock table [表名] read/write
        查询哪些表加了锁:show open tables
    • 行锁:

      1. 偏向InnoDB存储引擎,开销大,加锁慢,会出现死锁,发生锁冲突的几率小,并发度高

      2. 行锁是通过索引项来实现的,只有通过索引来检索项才会开启行锁。并且索引不能失效,索引失效的话,会从行锁变成表锁!!!

      3. InnoDB实现了两种类型的行锁

        • 共享锁(读锁)
          允许一个事务去读一行数据。阻止其他事务活动相同数量集的排他锁

        • 排他锁(写锁)
          允许一个事务去更新、读取这一行数据。阻止其他事务获取这个数量集的任何锁(包括共享锁和排他锁)

        • 几种上锁的情况:
          delete、update、insert会自动给涉及到的数据加上排他锁,直接使用select是不上任何锁的,但是select....for update会上排他锁、select...lock in share mode会上共享锁。所以加上排他锁之后不是其他事务就不能查询该列的数据了,可以用select直接查询。

      4. 间隙锁:用范围条件检索数据的时候,并请求共享或者排他锁时,InnoDB会给复合条件的已有数据记录的索引项加锁,对于键值在条件范围内但并不存在的记录,叫间隙(Gap)。InnoDB也会对这个间隙加锁,叫间隙锁。

  2. 按对数据的操作类型


上一篇下一篇

猜你喜欢

热点阅读