MySqL常见面试题( from guang)
前言 - MySql 体系结构
整个MySQL Server 由以下组成
- Connection Pool : 连接池组件
- Management Services & Utilities : 管理服务和工具组件
- SQL Interface : SQL接口组件
- Parser : 查询分析器组件
- Optimizer : 优化器组件
- Caches & Buffers : 缓冲池组件
- Pluggable Storage Engines : 存储引擎
- File System : 文件系统
连接层:
最上层是一些客户端和连接服务 。 包含本地的 sock 通信 和 大多数基于 客户端、服务端 工具实现 的类似于 Tcp/Ip 的通信、 主要完成一些类似于 连接处理,授权认证 以及相关的安全方案。
在这一层引入了线程池的概念。为通过认证安全接入的客户端提供线程。同样 在该层的实现基于 ssl 的安全连接, 服务器也 会为安全接入的每个客户端 验证他所具有的操作权限。
服务层:
第二层架构主要是为了完成大多数的核心服务功能,SQl 接口, 缓存的查询寻, SQL的分析和优化 部分内置函数的执行, 所有跨存储引擎的功能 也在这一层实现 , 如:过程,函数。
服务器会解析查询并创建相应的内部解析树, 并完成相对应的优化(如, 确定表的查询顺序,是否利用索引等)最后生成相应的执行操作。
如果是 select 操作 , 服务器还会查询 内部的缓存。如果缓存足够大,可以提高 在大量读操作环境下的性能
引擎层
存储引擎层, 存储引擎真正的负责了MySQL中数据的存储和提取,服务器通过API和存储引擎进行通信。不同的存储引擎具有不同的功能,这样我们可以根据自己的需要,来选取合适的存储引擎。
存储层
数据存储层, 主要是将数据存储在文件系统之上,并完成与存储引擎的交互。 和其他数据库相比,MySQL有点与众不同,它的架构可以在多种不同场景中应用并发挥良好作用。主要体现在存储引擎上,插件式的存储引擎架构,将查询处理和其他的系统任务以及数据的存储提取分离。这种架构可以根据业务的需求和实际需要选择合适的存储引擎。
第一部分 引擎
1.mysql三大范式
- 第一范式(1NF): 字段不可分(列不可分)
- 第二范式(2NF)要求数据库表中的每个实例或行必须可以被惟一地区分, 为实现区分 通常需要为表加上一个列,以存储各个实例的惟一标识。这个惟一属性列被称为主键
- 第三范式(3NF):数据不能存在传递关系,即每个属性都跟主键有直接关系而不是间接关系
2.数据库引擎有哪些?
主流的 : InnoDb, MyIsam
3.InnoDB与MyIsam的区别
- InnoDB 支持事务,MyIsam 不支持,对于 InnoDb 每一条SQL都默认封装成事务,自动提交.这样会影响速度.所以最好把多条SQL语句放在 bedin 和 commit 之间,组成一个事务
- InnoDB 支持外键,而 MyIsam 不支持,对一个包含外键的InnoDB表转成MyIsam 会失败.
- InnoDB是聚集索引,数据文件和索引是绑在一起的,必须要有主键,通过主键索引效率很高.但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询数据.因此主键不应该过大,因为主键太大,索引也会很大.MyIsam是非聚集索引,数据文件是分离的,索引保存的是文件的指针,主键索引和辅助索引是独立的
- InnoDB不保存表的具体行数,执行
selelct count(*) from Table
时需要全表扫描,而MyIsam用一个变量保存了整个表的行数,执行上述语句只需要读出该变量即可,速度很快 - InnoDB不支持全文索引,而MYIsam 支持全表索引,查询效率上 MyIsam要高
4.如何选择存储引擎?
InnoDB
: 是Mysql的默认存储引擎,用于事务处理应用程序,支持外键。如果应用程序
- 支持外键: 对事务的完整性,数据的一致性 有比较高的要求.
支持事务: 数据操作除了 插入 和 查询 外,还包含很多的 更新、删除操作
好处:
- InnoDB存储引擎除了有效的
降低由于删除和更新导致的锁定
- 还可以确保事务的完整提交和回滚
对于类似于计费系统或者财务系统等对数据准确性要求比较高的系统,InnoDB是最合适的选择。
- InnoDB存储引擎除了有效的