数据库 —— MySQL面试必问全集

课程是基于MySQL5.7

一  数据库和数据库实例 


在MySQL的学习研究中,存在两个非常容易混淆的概念,即数据库和数据库实例。在MySQL中,数据库和数据库实例定义如下:

      数据库:存储的数据的集合;

      数据库实例:操作数据库的集合。从操作系统的角度,数据库实例表现为一个进程,对应多个线程;在非集群数据库架构中,数据库与数据库实例存在一 一对应关系,在数据库集群中,可能存在多个数据库实例操作一个数据库情况,即多对一关系。

二  MySQL架构图 来源


 模块组件:

  1. 图形界面管理工具集
  2. MySQL向外提供的交互接口(Connectors):语言可以通过该组件来操作SQL语句,实现与SQL的交互。
  3. 管理服务组件和工具组件(Management Service & Utilities):提供对MySQL的集成管理,如备份(Backup),恢复(Recovery),安全管理(Security)等
  4. 连接池组件(Connection Pool):监听客户端向MySQL Server端的各种请求,接收请求,转发请求到目标模块。每个成功连接MySQL Server的客户请求都会被创建或分配一个线程,该线程负责客户端与MySQL Server端的通信,接收客户端发送的命令,传递服务端的结果信息等。
  5. SQL接口组件(SQL Interface):接收用户SQL命令,如DML,DDL和存储过程等,并将最终结果返回给用户。
  6. 查询分析器组件(Parser):首先分析SQL命令语法的合法性,并尝试将SQL命令分解成数据结构,若分解失败,则提示SQL语句不合理。
  7. 优化器组件(Optimizer):对SQL命令按照标准流程进行优化分析。
  8. 缓存主件(Caches & Buffers):缓存和缓冲组件
  9. 插件式存储引擎(Pluggable Storage Engines): 
    1. 什么是MySQL存储引擎
              MySQL属于关系型数据库,而关系型数据库的存储是以表的形式进行的,对于表的创建,数据的存储,检索,更新等都是由MySQL存储引擎完成的,这也是MySQL存储引擎在MySQL中扮演的重要角色。
              研究过SQL Server和Oracle的读者可能很清楚,这两种数据库的存储引擎只有一个,而MySQL的存储引擎种类比较多,如MyISAM存储引擎,InnoDB存储引擎和Memory存储引擎.
              MySQL之所以有多种存储引擎,是因为MySQL的开源性决定的。MySQL存储引擎,从种类上来说,大致可归结为官方存储引擎和第三方存储引起。MySQL的开源性,允许第三方基于MySQL骨架,开发适合自己业务需求的存储引擎。
    2. MySQL存储引擎作用
              MySQL存储引擎在MySQL中扮演重要角色,其作比较重要作用,大致归结为如下两方面:
      作用一:管理表创建,数据检索,索引创建等
      作用二:满足自定义存储引擎开发。
    3. MySQL引擎种类
              不同种类的存储引擎,在存储表时的存储引擎表机制也有所不同,从MySQL存储引擎种类上来说,可以分为官方存储引擎和第三方存储引擎。
             常用的存储引擎包括InnoDB存储引擎(行锁:并发性快;事务),MyISAM存储引擎和Momery存储引擎。
1066923-20190221110346340-983678201.png
几种典型MySQL存储引擎比较
  1. 物理文件(File System):实际存储MySQL 数据库文件和一些日志文件等的系统,如Linux,Unix,Windows等。
一个查询流程图

(插)DML vs. DDL:

  • DML(Data Manipulation Language)数据操纵语言:
    • 适用范围:对数据库中的数据进行一些简单操作,如insert,delete,update,select等.
    • DML操作是需要手动控制事务的开启、提交(commit)和回滚的。
  • DDL(Data Definition Language)数据定义语言:
    • 适用范围:对数据库中的某些对象(例如,database,table)进行管理,如Create,Alter和Drop.truncate
    • DDL操作是隐性提交的,不能rollback!

InnoDB 底层:

比如select * from student where Sno>1;

是先将该表的数据以页为单位放到内存,然后在内存中根据条件选择出要的数据,返回给客户端;

(插)局部性原理:

  • 时间局部性(temporal locality):被引用过一次的存储器位置在未来会被多次引用(通常在循环中,循环中的指令一段时间后很可能再次命中)
  • 空间局部性(spatial locality):如果一个存储器的位置被引用,那么将来他附近的位置也会被引用(连续内存的数组的读取)

在InnoDB中,数据会存储到磁盘上,在真正处理数据时需要先将数据加载到内存,表中读取某些记录时,InnoDB存储引擎不需要一条一条的把记录从磁盘上读出来,InnoDB采取的方式是:将数据划分为若干个页,以页作为磁盘和内存之间交互的基本单位,InnoDB中页的大小一般为 16 KB,也就是说,当需要从磁盘中读数据时每一次最少将从磁盘中读取16KB的内容到内存中,每一次最少也会把内存中的16KB内容写到磁盘中。(查看命令:SHOW GLOBAL STATUS like 'Innodb_page_size';)

InnoDB页结构:

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值