一、MySQL有多少种存储引擎?

  在MySQL5之后,支持的存储引擎有十多个,但是我们常用的就那么几种,而且,默认支持的也是 InnoDB。

  通过命令:show engines \g,我们可以查看到当前数据库可以支持的存储引擎有哪些。MySQL默认支持了9种,其中,有3种是我们最常见的。如下图:

二、你们项目中使用MySQL的搜索引擎是哪个?为什么要用这个?

  我们使用的是 InnoDB。

 1、InnoDB

  InnoDB是默认的数据库存储引擎,主要特点有:

  a、可以自动增长列,方法是:auto_increment。

  b、支持事务。默认的事务隔离级别是可重复读,通过MVCC(并发版本控制)来实现。

  c、使用的锁粒度为行级锁,可以支持更高的并发。

  d、支持外键约束;外键约束其实降低了表的查询速度,但是增加了表之间的耦合度。

  e、配合一些热备工具可以支持在线热备份。

  f、在 InnoDB 中存着缓冲管理,通过缓冲池,将索引和数据全部缓存起来,加快查询的速度;

  g、对于 InnoDB 类型的表,其数据的物理组织形式是聚簇表。所有的数据按照主键来组织,数据和索引放在一块,都位于B+树的叶子节点上。

  当然,InnoDB 的存储表和索引也有下面两种形式:

  (1)使用共享表空间存储:所有的表和索引存放在同一个表空间中。

  (2)使用多表空间存储:表结构放在frm文件,数据和索引放在IBD文件中。分区表的话,每个分区对应单独的IBD文件,分区表的定义可以查看我的其他文章。使用分区表的好处在于提升查询效率。

  对于InnoDB来说,最大的特点在于支持事务。但是这是以损失效率来换取的。

 2、MyISAM

  使用这个存储引擎,每个 MyISAM 在磁盘上存储形成3个文件:

    a、frm文件:存储表的定义数据;

    b、MYD文件:存放表具体记录的数据;

    c、MYI文件:存储索引;

  frm 和 MYI 可以存放在不同的目录下。MYI 文件用来存储索引,但仅保存记录所在页的指针,索引的结构是B+树结构。

  下面这张图就是MYI文件保存的机制:

  从这张图可以发现,这个存储引擎通过MYI的B+树结构来查找记录页,再根据记录页查找记录。并且支持全文索引、B树索引和数据压缩。

  支持数据的类型也有三种:

  (1)静态固定长度表

  这种方式的优点在于存储速度非常快,容易发生缓存,而且表发生损坏后也容易修复。缺点是占空间。这也是默认的存储格式。

  (2)动态可变长表

  优点是节省空间,但是一旦出错恢复起来比较麻烦。

  (3)压缩表

  上面说到支持数据压缩,说明肯定也支持这个格式。在数据文件发生错误时候,可以使用check table工具来检查,而且还可以使用repair table工具来恢复。

  有一个重要的特点那就是不支持事务,但是这也意味着他的存储速度更快,如果你的读写操作允许有错误数据的话,只是追求速度,可以选择这个存储引擎。

3、Memory

  将数据存在内存,为了提高数据的访问速度,每一个表实际上和一个磁盘文件关联。文件是frm。

  (1)支持的数据类型有限制,比如:不支持TEXT和BLOB类型,对于字符串类型的数据,只支持固定长度的行,VARCHAR会被自动存储为CHAR类型;

  (2)支持的锁粒度为表级锁。所以,在访问量比较大时,表级锁会成为MEMORY存储引擎的瓶颈;

  (3)由于数据是存放在内存中,一旦服务器出现故障,数据都会丢失;

  (4)查询的时候,如果有用到临时表,而且临时表中有BLOB,TEXT类型的字段,那么这个临时表就会转化为MyISAM类型的表,性能会急剧降低;

  (5)默认使用hash索引。

  (6)如果一个内部表很大,会转化为磁盘表。

  在这里只是给出3个常见的存储引擎。使用哪一种引擎需要灵活选择,一个数据库中多个表可以使用不同引擎以满足各种性能和实际需求,使用合适的存储引擎,将会提高整个数据库的性能

三、你们数据库中单表最大的数据量有多少?查询时有什么问题?你们怎么处理的?

  优化:1、分库分表(阿里开发规范里,单表数据量超过500W或超过2GB,才推荐分库分表。);2、索引优化;

你们数据库中单表最大的数据量有多少?查询时有什么问题?你们怎么处理的?

《面试经典系列》- MySQL数据库存储引擎的更多相关文章

  1. MYSQL——数据库存储引擎!

    本人安装mysql版本为:mysql  Ver 14.14 Distrib 5.7.18, for Win64 (x86_64),查看mysql的版本号方式:cmd-->mysql --vers ...

  2. mysql数据库存储引擎及区别

    MySQL有多种存储引擎,每种存储引擎有各自的优缺点,可以择优选择使用:MyISAM.InnoDB.MERGE.MEMORY(HEAP).BDB(BerkeleyDB).EXAMPLE.FEDERAT ...

  3. MySQL数据库----存储引擎

    什么是存储引擎? 存储引擎说白了就是如何存储数据.如何为存储的数据建立索引和如何更新.查询数据等技术的实现方法.因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和操 ...

  4. Linux环境下修改MySQL数据库存储引擎

    今天在执行Oracle数据库迁移至MySQL数据库时报出了一个错误信息: Specified key was too bytes 百度发现,原来需要更改MySQL数据库的存储引擎为InnoDB,查询目 ...

  5. MySQL数据库 存储引擎,创建表完整的语法,字段类型,约束条件

    1.存储引擎 - 存储引擎是用于根据不同的机制处理不同的数据. - 查看mysql中所有引擎: - show engines; - myisam: 5.5以前老的版本使用的存储引擎 - blackho ...

  6. 【转】MySQL 数据库存储引擎

    原文地址:http://blog.jobbole.com/94385/ 简单介绍 存储引擎就是指表的类型.数据库的存储引擎决定了表在计算机中的存储方式.存储引擎的概念是MySQl的特点,而且是一个插入 ...

  7. MySQL 数据库存储引擎

    简单介绍 存储引擎就是指表的类型.数据库的存储引擎决定了表在计算机中的存储方式.存储引擎的概念是MySQl的特点,而且是一个插入式的存储引擎概念.这就决定了MySQl数据库中的表可以使用不同的存储方式 ...

  8. (转)Mysql数据库存储引擎

    什么是MySql数据库 通常意义上,数据库也就是数据的集合,具体到计算机上数据库可以是存储器上一些文件的集合或者一些内存数据的集合.     我们通常说的MySql数据库,sql server数据库等 ...

  9. MySQL数据库存储引擎

    这里主要介绍最常用的两种存储引擎. 1.InnoDB InnoDB是一个事务型的存储引擎,有行级锁定和外键约束.Innodb引擎提供了对数据库ACID事务的支持,并且实现了SQL标准的四种隔离级别,关 ...

随机推荐

  1. JAVA SE Lesson 1

    1.  类是一种抽象的概念,对象是类的一种具体表示形式,是具体的概念.先有类,然后由类来生成对象(Object).对象又叫做实例(Instance).2.  类由两大部分构成:属性以及方法.属性一般用 ...

  2. Django+Celery框架自动化定时任务开发

    本章介绍使用DjCelery即Django+Celery框架开发定时任务功能,在Autotestplat平台上实现单一接口自动化测试脚本.业务场景接口自动化测试脚本.App自动化测试脚本.Web自动化 ...

  3. HTML中的<%%>是什么意思

    背景: 今天在nutzwk框架中看到这段代码. 在index.html界面 <% layout("/layouts/platform.html"){ %> <di ...

  4. Docker实战之MySQL主从复制

    前言 曾几何时,看着高大上的架构和各位前辈高超的炫技,有没有怦然心动,也想一窥究竟?每当面试的时候,拿着单应用的架构,吹着分库分表的牛X,有没有心里慌的一批? 其实很多时候,我们所缺少的只是对高大上的 ...

  5. 得亏了它,我才把潜藏那么深的Bug挖出来

    2020年写了很多事故解决的文章,并不是我绞尽脑汁想出来的,而是真的遇到了这些问题.通过文章的方式记录下来,分享出去,才有意义. 事故背景 首先看下面的图吧,这是我从cat上截的图. 可以看到是一个R ...

  6. 2,Java中的数据结构

    1,字符串(String) ···String为特殊的引用类型,不可变. ···常用实例方法:     获取子串:substring(start, end);     获取索引:indexOf(cha ...

  7. safari坑之 回弹

    博客地址: https://www.seyana.life/post/20 今天在使用safari浏览博客的时候, 发现在拉至顶部并产生回弹之后,头部导航隐藏了, 除非在上拉的时候,刚好达到顶部而不超 ...

  8. DEV GridControl控件使用(CheckBox全选、操作按钮、事件处理,获取值)

    1.GridControl控件使用 (1)绑定数据源 //绑定DataTable gridControl1.DataSource = DbHelper.ExecuteDataTable("S ...

  9. css 实战技巧

    css 看起来比较简单,但是要想做的好也不是那么容易,我们在平时开发中,主要用css 来美化我们的html结构,所有我觉得css 还是挺重要的,这里记录整理一些关于css 的技巧以及容易忘记的知识点. ...

  10. vue中moment.js的使用

    一.介绍 moment.js是一款现在对时间处理的强大的函数. Moment被设计用于在浏览器和Node.js中工作. 目前ci系统使用的浏览器有:IE8.IE9在Windows 7上.Chrome在 ...