MySQL的知识面试中还是经常被问到的,简单的使用似乎无法达到面试官的要求,很多问题会关于Mysql存储引擎,所以这里还是需要系统学习一下Mysql的一些知识,面试过程中游刃有余。

MySQL体系结构

MySQL是多个子系统构成的层次化的系统。

a.Connectors:用来与客户端应用程序建立连接的数据库接口。(提供各种高级语言的版本,比如之前的Mysql-python-connector)。

b.Management Services & Utilities:系统管理与服务控制相关的辅助工具。

c.Connection Pool:负责处理与用户访问有关的用户登录,线程处理,内存和进程缓存需求。

d.SQL Interface:提供从用户接收命令并把结果返回给用户的机制。

e.Parser:针对SQL语句进行语法分析和解析,构建一个用来查询的数据结构。

f.Optimizer:优化查询语句,是的数据检索动作的效率非常的接近最优化。使用一种“选取-投影-联结”的策略进行优化,首先根据限制条件,即where语句选取满足条件的数据,然后根据select后面的属性进行投影,最后根据联结条件得出最终的数据。

g.Caches & Buffers:保证使用最频繁的数据能够以最高效率的方式被访问,提供的缓存方式:表缓存,记录缓存,键缓存,权限缓存,主机名缓存。

h.Pluggable Storage Engines:插件式的存储引擎,底层物理结构的实现,负责数据库执行实际的I/O操作,基于表结构,不是基于数据库的,可以为不同的表定制不同的存储引擎。其核心是一个抽象的文件访问接口,所以存在第三方实现的存储引擎,利用这个文件访问接口建立的新的文件访问机制。

Mysql主要存储引擎

存储引擎的关键技术点(各个引擎的实现的着重点不同,重视不同的技术点):

1.并发性:锁粒度。    锁的粒度越大,加锁消耗越少,并发度也就越低。Mysql提供三种锁的粒度,表级>页级>行级。

2.事务支持:ACID。原子性,一致性,隔离性,持久性。     事务的特性。

3.引用完整性:外键支持。   引用完整性及维持外键引用的关系,学生(学号,姓名,性别,年龄,班级编号)其中学号为主码。班级(班级编号,学生数量,班主任姓名),其中班级编号为主码。用完整性就是定义外关键字与主关键字之间的引用规则。如果要删除被引用的对象,那么也要删除引用它的所有对象,或者把引用值设置为空(如果允许的话)。

4.物理存储:表与索引等文件格式。

5.索引支持:索引策略与方法。

6.内存高速缓存:缓存与缓冲策略。

7.其他目标特性:安全限制等。

InnoDB

支持事务(很重要的特性)

行锁设计,提供并发性,同时支持MVCC。(多版本并发控制)

支持外键,确保引用完整性

独立的ibd文件存储表结构和数据

适用于:强调可靠性和需要支持事务处理的场景。

MyISAM

不支持事务

表锁设计

全文索引

存储表由MYD和MYI组成,分别存放数据和索引

使用数据压缩和索引优化

特点:可靠性高,适用范围广,检索速度快

适用于:强调数据检索速度

NDB

Network database,一种集群存储引擎

采用share nothing集群架构-每个节点拥有自己的内存和磁盘

数据全部存储在内存中,主键查询速度快

增加NDB的存储节点,线性提高性能

join连接的网络消耗大

对RAM需求较大

适用于:冗余,高可用性,负载均衡(难道需要负载均衡器,应该设计好了)

Memory

表数据存放在内存中

默认使用哈希索引

.frm的扩展名指明它存储的表定义

服务器存储,表中数据丢失(RAM存储决定)

只支持表锁,并发性差

不支持TEXT和BLOB类型

按照定长方式存储变长VARCHAR类型

高速度,低延迟,不适合频繁读写(why?)

适用于:临时存储,数据仓库的维度表

NDB相比于Memory来说,NDB支持行锁机制,并发性更高,可以选择磁盘存储介质存储,而且Cluster的架构保证NDB99.999%的可用性,支持Memory中不支持的数据类型。

Archive

提供高速的插入和压缩功能

行锁,仅支持insert和select,不支持事务,数据压缩

适用于:存储归档数据,日志信息

Maria

取代原有的MyISAM存储引擎,缓存数据和索引文件,行锁设计,支持MVCC功能,支持事务和非事务安全

MySQL知识小结的更多相关文章

  1. Android app开发知识小结

    Android知识小结 这是一个知识的总结,所以没有详解的讲解. 一.分辨率Android中dp长度.sp字体使用.px像素.in英寸.pt英寸1/72.mm毫米 了解dp首先要知道density,d ...

  2. MySQL知识树-查询语句

    在日常的web应用开发过程中,一般会涉及到数据库方面的操作,其中查询又是占绝大部分的.我们不仅要会写查询,最好能系统的学习下与查询相关的知识点,这篇随笔我们就来一起看看MySQL查询知识相关的树是什么 ...

  3. C/C++ 位域知识小结

    C/C++ 位域知识小结 几篇较全面的位域相关的文章: http://www.uplook.cn/blog/9/93362/ C/C++位域(Bit-fields)之我见 C中的位域与大小端问题 内存 ...

  4. 两个容易被忽略的mysql知识

    原文:两个容易被忽略的mysql知识 为什么标题要起这个名字呢?commen sence指的是那些大家都应该知道的事情,但往往大家又会会略这些东西,或者对这些东西一知半解,今天我总结下自己在mysql ...

  5. mysql字符集小结

    http://blog.csdn.net/wyzxg/article/details/8779682 author:skatetime:2013/04/09 mysql字符集小结 今天同事阿杰兄发现内 ...

  6. JAVA 变量 数据类型 运算符 知识小结

    ---------------------------------------------------> JAVA 变量 数据类型 运算符 知识小结 <------------------ ...

  7. html5-基本知识小结及补充

    <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8&qu ...

  8. HTTPS知识小结

    HTTPS知识小结 背景1:TCP握手 internet上的两台机器A,B要建立起HTTP连接了,在这之前要先建立TCP连接,情景大概是这样子的: A:你好,我跟你建立一个TCP好吗? B:好啊. A ...

  9. shell 环境变量的知识小结

    环境变量的知识小结:·变量名通常要大写.·变量可以在自身的Shell及子Shell中使用.·常用export来定义环境变量.·执行env默认可以显示所有的环境变量名称及对应的值.·输出时用“$变量名” ...

随机推荐

  1. Thinkphp5笔记三:创建基类

    做项目之前,一定要先部署要自己的"基类",非常的重要.打个比方,要访问会员中心相关的控制器,这类控制器是不是都要有一个“登录限制”,才让访问会员相关的控制器? 一.创建三大基类 原 ...

  2. bash: /usr/bin/npm: No such file or directory

    一个整得很烂了的Ubuntu服务器, 各种问题乱出. npm老是升不到最新版(一直显示1.4),于是我干脆删了, 结果再去装却装不上了, 如果用apt-get install npm安装, 就得到如下 ...

  3. webdriver 日期控件的处理

    http://www.cnblogs.com/liu-ke/p/4200736.html http://blog.csdn.net/wanglha/article/details/44620627 h ...

  4. symfony 事务提交

    1. 添加数据 新建一个对象,给对象赋值 $em = $this->getDoctrine()->getManager(); //添加事物 $em->getConnection()- ...

  5. 2018年7月份,python上传自己的包库到pypi官网的方法

    最近pypi官网进行了更新,老的上传网址作废了.记录下上传到pypi的方法 0.去pypi官网注册账号,没账号是不可能上传的,想想也是那不乱套了吗,注册后会收到一个邮件需要点击然后重新登录 1.目录就 ...

  6. [Scikit-learn] 1.4 Support Vector Machines - Linear Classification

    Outline: 作为一种典型的应用升维的方法,内容比较多,自带体系,以李航的书为主,分篇学习. 函数间隔和几何间隔 最大间隔 凸最优化问题 凸二次规划问题 线性支持向量机和软间隔最大化 添加的约束很 ...

  7. Mac下配置svn服务器

    Mac OS X 系统已经内置了svn支持,所以需要做的就只是配置,可以用svnadmin –vsersion(svnserve –version)查看.希望能对 您配置 SVN.进行开发版本控制有所 ...

  8. Eclipse------新建文件时没有JSP File解决方法

    1.为没有web选项的eclipse添加web and JavaEE插件 .在Eclipse中菜单help选项中选择install new software选项 .在work with 栏中输入 Ju ...

  9. hdu 2348 Turn the corner(三分&amp;&amp;几何)(中等)

    Turn the corner Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  10. 02-centOS6.7安装

    CentOS6.5在VMware10中安装 1.启动VMware的画面 2.点击File--->New Virtual Machine 创建一台新虚拟机 3.在弹出框中选择典型安装 4.选择I ...