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. vue-cli3用图形化的方式创建项目

    Vue脚手架可以快速生成Vue项目基础的架构. A.安装3.x版本的Vue脚手架: npm install -g @vue/cli B.基于3.x版本的脚手架创建Vue项目: 1).使用命令创建Vue ...

  2. API设计之道

    接口安全要求: 1.防伪装攻击(案例:在公共网络环境中,第三方 有意或恶意 的调用我们的接口) 2.防篡改攻击(案例:在公共网络环境中,请求头/查询字符串/内容 在传输过程被修改) 3.防重放攻击(案 ...

  3. 零基础C#网站开发实战教学(全套)最新更新2019-12-16。。。

    这是林枫山自己编写制作的全套Visual Studio 2013 C# 网站开发案例实战教学教程,欢迎下载学习. 下载目录链接如下(如果链接下载不了,请加QQ:714259796获取教程): 网站界面 ...

  4. NancyFx And ReactiveX

    http://reactivex.io/ https://github.com/dotnet/reactive http://nancyfx.org/ NancyFX Nancy快速上手 (使用Nan ...

  5. 如何利用Docker构建基于DevOps的全自动CI

    来自用户的DevOps实践分享,分享从开发代码到生产环境部署的一条龙操作的实践及经验, 包含工具技术的选型及考量.私有代码库与私有镜像库的应用等. (一)容器服务的Rancher选型 1.为什么说是下 ...

  6. springboot2.0以后的junit

    只需要引入: <dependency> <groupId>junit</groupId> <artifactId>junit</artifactI ...

  7. javascript两种循环写法

    var i=0,len=cars.length; for (; i<len; ) { document.write(cars[i] + "<br>"); i++; ...

  8. Versioning information could not be retrieved from the NuGet package repository. Please try again later.

    Versioning information could not be retrieved from the NuGet package repository. Please try again la ...

  9. Mysql 中 int(3) 和 int(11) 的区别

    [1]int(3) 和 int(11)的区别(思维惯性认知错误) 这里的3或11代表的是存储在数据库中的具体的长度,总以为int(3)只能存储3个长度的数字,int(11)只会存储11个长度的数字. ...

  10. RHEL6.5 移植使用CentOS 的YUM 步骤

    问题:使用 Red Hat Enterprise Linux Server(RHEL) yum安装软件时显示 This system is not registered with RHN. RHN s ...