暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL技术内幕读书笔记(持续更新)

evilRat 2021-01-23
503

由于对MySQL的了解不够透彻,虽然用起来没问题,也知道一些常见的知识点,但是一直把它当作一个黑盒来使用,不免有些心里没底,所以下定决心,通过姜承尧大佬的书MySQL技术内幕,认真了解MySQL技术细节。我会将一些我认为重要的知识,记录在这篇博客中,希望看到这篇文章的你,也能有所收获。

第一章 MySQL体系结构和存储引擎

1. Mysql体系结构

  1. 数据库是文件的集合,是依照某种数据模型组织起来并存放于二级存储器中的数据集合;数据库实例是程序,是位于用户与操作系统之间的一层数据管理软件,用户对数据库数据的任何操作,包括数据库定义、数据查询、数据维护、数据库运行控制等都是在数据库实例下进行的,应用程序只有通过数据库实例才能和数据库打交道。
  2. MySQL由以下几个部分组成:
  • 连接池组件
  • 管理服务和工具组件
  • SQL接口组件
  • 查询分析器组件
  • 优化器组件
  • 缓存(cache)组件
  • 插件式存储引擎
  • 物理文件
  • MySQL区别于其他数据库的最重要的一个特点就是它的插件式的表存储引擎。
  • 存储引擎是基于表的,而不是数据库。
  • 2. MySQL存储引擎

    1. MySQL是开源的,用户可以基于MySQL预定义的存储引擎接口编写自己的存储引擎。当然也可以通过修改某一存储引擎的源码来得到想要的特性。
    2. InnoDB存储引擎最早是第三方存储引擎,后来被Oracle收购。

    1. InnoDB存储引擎

    1. InnoDB存储引擎支持事务。其设计目标主要面向在线事务处理(OLTP)的应用。其特点是:行锁设计、支持外键,并支持类似Oracle的非锁定读,即默认读取操作不会产生锁。
    2. 从5.5.8版本开始,InnoDB是MySQL默认的存储引擎。
    3. InnoDB存储引擎将数据放在一个逻辑的表空间中。表空间由InnoDB自身进行管理。从MySQL4.1开始,它可以将每个InnoDB存储引擎的表单独存放到一个独立的ibd文件中。InnoDB支持用裸设备(raw disk)建立表空间。裸设备:裸设备(raw device),也叫裸分区(原始分区),是一种没有经过格式化,不被Unix通过文件系统来读取的特殊块设备文件。由应用程序负责对它进行读写操作。不经过文件系统的缓冲。它是不被操作系统直接管理的设备。这种设备少了操作系统这一层,I/O效率更高。不少数据库都能通过使用裸设备作为存储介质来提高I/O效率。
    4. InnoDB通过使用多版本并发控制(MVCC)来获得高并发性,并实现了SQL的4种隔离级别,默认Repeatable级别。
    5. InnoDB使用一种next-key locking的策略来避免幻读的产生。
    6. InnoDB提供了插入缓存(insert buffer)、二次写(double write)、自适应哈希索引(adaptive hash index)、预读(read ahead)等高性能和高可用功能。
    7. InnoDB表存储数据采用了聚集(clustered)的方式,因此每张表的存储都是按照主键的顺序进行存放。如果没有显式地定义主键,InnoDB会为每一行数据生成一个6字节的ROWID,并以此作为主键。

    2. MyISAM存储引擎

    1. MyISAM存储引擎不支持事务、锁表设计,支持全文索引,主要面向一些OLAP数据库应用。
    2. MySQL5.5.8之前默认存储引擎是MyISAM(Windows版本除外)。
    3. MyISAM存储引擎的缓冲池只缓存索引文件,而不缓存数据文件。这点和大多数数据库都不同。
    4. MyISAM存储引擎表由MYD和MYI组成,MYD用来存放数据文件,MYI用来存放索引文件。
    5. MySQL5.0之前MyISAM默认支持的表大小是4G,如果需要更大的MyISAM表的话,就要制定MAX_ROWS和AVG_ROW_LENGTH属性。从5.0版本开始,MyISAM默认支持256TB的单表数据,这足够一般应用的需求。


    文章转载自evilRat,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

    评论