5.6版本以前默认是MyISam存储引擎,5.6版本之后默认支持的Innodb存储引擎,这两种也是最常用的.

存储引擎层

  • MyISAM 5.5之前版本默认存储引擎
    • 存储引擎表由MYD和MYI组成

    • 特性(只读还可以接受)

      • 并发性和锁级别(表级锁)

      • 表损坏修复,不支持事务

        check table tablename
        检查表
        repqir table tablename
        恢复表
        # 通过engine指定存储引擎
        create table myIsam(id int,c1 varchar(10))engine=myisam;
      • MyISam表支持的索引类型

      • MyISAM表支持数据压缩

        # 命令行: myisampack
      • 适用场景:

        • 非事务型应用
        • 只读类应用
        • 控件类应用

    https://www.cnblogs.com/kerrycode/p/9515200.html

    • 存储引擎之Innodb(5.5之后默认存储引擎)
    • 判断独立表空间和共享表空间的方法

      1、在配置文件my.cnf里面设置innodb_file_per_table=0,重启MySQL服务,创建表common_tablespace,你会在数据目录看到只有common_tablespace.frm文件。

      如果表的存储引擎是InnoDB,而且表空间(tablespace)是共享表空间的话,那么数据库对应目录下面是没有"表名.ibd"文件的。独立表空间的表的话,则有"表名.ibd"文件。只是这个方法很笨,对于生产环境,大量的表通过这种方式判别,确实不是一个好方法。

      2、MySQL 5.6 INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES 关于这个系统表提供了有关表格的格式和存储特性,包括行格式,压缩页面大小位级别的信息(如适用),INNODB的表空间信息。

      # 共享表空间
      SELECT TABLE_SCHEMA
      ,TABLE_NAME
      ,TABLE_TYPE
      ,N'共享表空间' AS TABLE_SPACE
      ,ENGINE
      ,VERSION
      ,TABLE_ROWS
      ,AVG_ROW_LENGTH
      ,CREATE_TIME
      ,UPDATE_TIME
      FROM INFORMATION_SCHEMA.TABLES T
      LEFT JOIN INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES I ON CONCAT(T.TABLE_SCHEMA, '/',T.TABLE_NAME)=I.NAME
      WHERE I.NAME IS NULL AND T.TABLE_SCHEMA='MyDB' AND T.ENGINE='InnoDB'; #独立表空间
      SELECT TABLE_SCHEMA
      ,TABLE_NAME
      ,TABLE_TYPE
      ,N'独立表空间' AS TABLE_SPACE
      ,ENGINE
      ,VERSION
      ,TABLE_ROWS
      ,AVG_ROW_LENGTH
      ,CREATE_TIME
      ,UPDATE_TIME
      FROM INFORMATION_SCHEMA.TABLES T
      INNER JOIN INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES I ON CONCAT(T.TABLE_SCHEMA, '/',T.TABLE_NAME)=I.NAME
      WHERE T.TABLE_SCHEMA='MyDB' AND T.ENGINE='InnoDB';

      3、如果是MySQL 5.7的话, 比MySQL 5.6有多了一种方法,MySQL 5.7 的INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES中多了SPACE_TYPE字段,不过其值全部为Single,而INFORMATION_SCHEMA.INNODB_SYS_TABLES中也多了字段SPACE_TYPE, 其值有Single与System 分别表示单独表空间和共享表空间。

      #独立表空间
      SELECT * FROM
      INFORMATION_SCHEMA.INNODB_SYS_TABLES
      WHERE SPACE_TYPE='Single';
      #共享表空间
      SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES
      WHERE SPACE_TYPE='System';

      4、如果是MySLQ 8.0的话,还多了一种方法, 那就是通过INFORMATION_SCHEMA.INNODB_TABLES来判断,这个新增的系统表可以通过SPACE_TYPE字段来区分共享表空间与独立表空间

      SELECT * FROM  INFORMATION_SCHEMA.INNODB_TABLES WHERE SPACE_TYPE=’Single’;
      • 使用表空间进行数据存储

        innodb_file_per_table
        ON: 独立表空间: tablename. ibd
        OFF: 系统表空间:ibdataX
      • 系统表空间和独立表空间要如何选择

        比较:

        • 系统表空间无法简单的收缩文件大小
        • 系统表空间会产生IO瓶颈
        • 独立表空间可以收缩文件大小
        • 独立表空间可以同时向多个文件刷新数据

        表转移的步骤:

        • 使用mysqldump导出所有数据库表数据
        • 停止Mysql服务,修改参数,并删除Innodb相关文件
        • 重启Mysql服务,重建Innodb系统表空间
      • Innodb存储引擎的特性

        • Innodb是一种事务性存储引擎
        • 完全支持事务的ACID特性
        • Redo Log 和 Undo Log
        • Innodb支持行级锁
          • 行级锁可以最大程度的支持并发
          • 行级锁是由存储引擎层实现的

        什么是锁

        • 锁对主要作用是管理共享资源的并发访问
        • 锁用于实现事务的隔离性

        打个比方: 邮件系统,当两个用户向同一地址发送邮件时,这时候只会有一个用户发送成功,另外一个会暂时阻塞,这就是锁也就是事务特性中的隔离性,避免了损坏数据。

        锁的类型

        • 共享锁(也称为读锁,多个线程可以同时进行)
        • 独占锁(也称写锁,只能单线程访问是互斥)

        锁的粒度

        相互之间不存在阻塞,锁的单元越小支持并发越高,比如innodb支持行级锁,这样当需要写入数据时只会对单行操作而不影响其他数据的并行操作,粒度主要就是对操作数据的锁的单元。

        • 表级锁(服务器层)
        • 行级锁

        阻塞和死锁

        • 什么是阻塞(一个连接在等待另一个连接资源断开)
        • 什么是死锁(两个或两个以上相互占用对方占用的资源)

        Innodb状态检查

        show engine innodb status

        适用场景

        Innodb适合于大多数OLTP应用

        存储引擎之Memory
        • 文件系统储存特点

          • 也称为HEAP存储引擎,所以数据保存在内存中
          • 当服务器重启后数据会丢失表结构不会丢失(数据索引保存在内存中)
        • 功能特点

          • 支持HASH索引和BTree索引
          • 所有字段为固定长度varchar(10)=char(10)
          • 不支持BLOG和TEXT等打字段(浪费很大资源空间)
          • Memory存储引擎使用表级锁
          • 最大大小是由max_heap_table_size参数决定
        • 使用场景(数据易丢失,所以要求数据可再生)

          • 用于查找或者是映射表,例如邮编和地区的对应
          • 用于保存数据分析中产生的中间表
          • 用于缓存周期性聚合数据的结果表

什么影响了mysql的性能-存储引擎层的更多相关文章

  1. MySQL的常见存储引擎介绍与参数设置调优

    MySQL常用存储引擎之MyISAM 特性: 1.并发性与锁级别 2.表损坏修复 check table tablename repair table tablename 3.MyISAM表支持的索引 ...

  2. MySQL的常见存储引擎介绍与参数设置调优(转载)

    原文地址:http://www.cnblogs.com/demon89/p/8490229.html MySQL常用存储引擎之MyISAM 特性: 1.并发性与锁级别 2.表损坏修复 check ta ...

  3. MySQL两种存储引擎: MyISAM和InnoDB

    MySQL两种存储引擎: MyISAM和InnoDB 简单总结   MyISAM是MySQL的默认数据库引擎(5.5版之前),由早期的ISAM(Indexed Sequential Access Me ...

  4. MySql的多存储引擎架构, 默认的引擎InnoDB与 MYISAM的区别(滴滴)

    1.存储引擎是什么? MySQL中的数据用各种不同的技术存储在文件(或者内存)中.这些技术中的每一种技术都使用不同的存储机制.索引技巧.锁定水平并且最终提供广泛的不同的功能和能力.通过选择不同的技术, ...

  5. 百万年薪python之路 -- MySQL数据库之 存储引擎

    MySQL之存储引擎 一. 存储引擎概述 定义: 存储引擎是mysql数据库独有的存储数据.为数据建立索引.更新数据.查询数据等技术的实现方法 ​ 首先声明一点: 存储引擎这个概念只有MySQL才有. ...

  6. MySQL体系结构与存储引擎

    MySQL 体系结构 先看 MySQL 数据库的体系结构,如下图所示. MySQL 体系结构由 Client Connectors 层.MySQL Server 层及存储引擎层组成. Client C ...

  7. MySQL各大存储引擎

    MySQL各大存储引擎: 最好先看下你下的MySQL支持什么数据库引擎 存储引擎主要有: 1. MyIsam , 2. InnoDB, 3. Memory, 4. Blackhole, 5. CSV, ...

  8. mysql数据库之 存储引擎、事务、视图、触发器、存储过程、函数、流程控制、数据库备份

    目录 一.存储引擎 1.什么是存储引擎? 2.mysql支持的存储引擎 3. 使用存储引擎 二.事务 三.视图 1.什么是视图 2.为什么要用视图 3.如何用视图 四.触发器 为何要用触发器 创建触发 ...

  9. 关于MySQL事务和存储引擎常见FAQ

    1.什么是事务? 事务就是「一组原子性的SQL查询」,或者说一个独立的工作单元.如果数据库引擎能够成功地对数据库应用该组查询的全部语句,那么就执行该组查询.如果其中有任何一条语句因为崩溃或其他原因无法 ...

随机推荐

  1. Windows 10提示你不能访问此共享文件夹,因为你组织的安全策略阻止未经身份验证的来宾访问

    Windows 10提示你不能访问此共享文件夹,因为你组织的安全策略阻止未经身份验证的来宾访问 1.首先按window+R键打开运行.如下图 2.在运行中输入“gpedit.msc”来启动本地组策略编 ...

  2. BigDecimal 基本使用 比较大小和加减乘除

    //比较大小: int a = bigdemical.compareTo(bigdemical2) //a = -1,表示bigdemical小于bigdemical2: //a = 0,表示bigd ...

  3. Qt开发经验小技巧61-70

    很多人问Qt嵌入式平台用哪个好,这里统一回答(当前时间节点2018年):imx6+335x比较稳定,性能高就用RK3288 RK3399,便宜的话就用全志H3,玩一玩可以用树莓派香橙派. 对于大段的注 ...

  4. ShoeBox一个超级好用的图片切割工具

    下载地址:http://renderhjs.net/shoebox/ ShoeBox是一个图片处理软件,体积很小. 我主要用第三个功能拆开图片.根据大图上的小图空白间隙来处理的. 导出后变成很多小图

  5. VC++ 学习笔记(六):简单C++

    到现在,我觉得终于找到学习和使用C++的基本原则了——务必简单.将其看成一个带类的C,或者将其看做标准库下的C++. C++太复杂——其实这种复杂性,所有语言都有,只是多数语言都隐藏了这种复杂性,只有 ...

  6. python/shell代码片段

    查看某模块路径 Bash pip show --files selenium 文件编码转换 Bash convmv -f GBK -t UTF-8 --notest -r ydcz_1/ 查找当前目录 ...

  7. MariaDB 10.3 序列

    在MariaDB .3版本中sequence是特殊的表,和表使用相同的namespace,因此表和序列的名字不能相同. MariaDB [wuhan]> select version(); +- ...

  8. 手撕面试官系列(四 ):MongoDB+Redis 面试专题

    MongoDB   (面试题+答案领取方式见侧边栏) 你说的 NoSQL 数据库是什么意思?NoSQL 与 RDBMS 直接有什么区别?为什么要使用和不使用NoSQL 数据库?说一说 NoSQL 数据 ...

  9. Flink WorkCount代码

    Flink-scala所需依赖 <properties> <flink.version>1.7.0</flink.version> </properties& ...

  10. MySQL8.0 下载安装启动(Windows10)

    2019年6月13日20:13:21 MySQL8.0 下载安装启动(Windows10) 下载 下载地址:https://dev.mysql.com/downloads/mysql/8.0.html ...