一:什么是引擎?

  - 就是一种数据存取和处理方式。

  - 在 MySQL 中,引擎是以"插件式"存在的,使我们可以很方便的使用各种引擎。

二:怎么查看数据库支持的引擎?

  - show engines;

  • mysql> show engines;
    +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
    | Engine | Support | Comment | Transactions | XA | Savepoints |
    +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
    | MyISAM | YES | MyISAM storage engine | NO | NO | NO |
    | MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
    | CSV | YES | CSV storage engine | NO | NO | NO |
    | BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
    | InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
    | PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
    | ARCHIVE | YES | Archive storage engine | NO | NO | NO |
    | MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
    | FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL |
    +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
    rows in set (0.00 sec) - Engine 引擎名称。

    - Support 当前是否支持该引擎
    - YES 支持,并处与可用状态
    - DEFAULT 支持并设置为默认引擎
    - NO 不支持
    - DISABLED 当前支持该引擎,但是被禁用

    - Comment 一些其他信息 - Transactions 是否支持事务 - XA 是否支持分布式 - Savepoints 是否支持保存点

三:MEMORY 引擎

  - 顾名思义,内存引擎,避免IO消耗,直接快速读取内存。

  - 同样因为它的这种特性,可以存储一些(用户位置/在线类表)等不是需要持久化的,可以快速重建的数据。

  - 缺点也同理,服务重启/崩溃数据会被清空数据(保留表结构)。

  - 但是在实际中并不常用

    - 在使用 MEMORY 引擎时必须有足够大的内存,否则这些内存不会被回收,当写满了就会报错。

    - redis 在同量下比 MEMORY 做的更好。

    - 没有 reids 灵活,增大了维护的成本

四:ARCHIVE 引擎

  - 如其名 归档 引擎。能够将大量数据压缩存储(使用zlib无损压缩算法),极大的节省空间。

  - 压缩能力有多好呢,这里插入了 10W条的单字段,占用也只有28K左右.

  - 但是,目前只支持 INSERT/SELECT 不支持 DELETE/UPDATE等。支持 ORDER BY ,行级锁定,5.5之后支持索引。

  - 最出众的就是插入效率非常高,占用空间极小。

  - 从上面看来,这货就是为归档数据准备的,如果有历史数据需要归档处理(极少访问/不能删除),那么 ARCHIVE 是个不错的选择。

  • CREATE TABLE `archive` (
    `count` varchar() DEFAULT NULL
    ) ENGINE=ARCHIVE DEFAULT CHARSET=utf8 查看占用
    mysql> show table status like 'archive' \G;
    *************************** . row ***************************
    Name: archive
    Engine: ARCHIVE
    Version:
    Row_format: Compressed
    Rows: // 1058576 条
    Avg_row_length:
    Data_length: // 29362 / 1024 差不多占用28K

五:MyISAM 引擎

  - 5.5 之前的明星引擎。5.5 之后被 Inoodb 作为默认引擎代替。

  - 字符定义最大不超过 65532(全部引擎/字符集)。

  -  不支持事务,外键,优势是访问速度快。

  - MyISAM 支持三种不同的存储格式

    - 静态(FIXED)  静态相对来说是最安全/最快的查找方式(通过定义varchar()成为静态表的,属于用空间换时间的策略)

    - 动态(DYNAMIC)  定义的字段中只要有 varchar()等动态定义的字段,这个表就会成为动态表(当然也可以通过 ROW_FORMAT=FIXED/DYNAMIC 动态指定)

    - 压缩(COMPRESSED)

  - 应用场景

    -  对数据完整性没有要求的

    -  以插入/搜索为主的程序可以使用这个

    -  少量 删除/更新 操作

 

六:InnoDB 引擎

  -  支持事务,在写效率上比 MyIsam 差

  -  应用场景

    -  数据一致性

    -  大量的 更新/删除 操作

七:InnoDB 和 MyISAM 的区别

  - innodb支持事务,而 MyISAM 不支持

  - 如果有大量的select操作,请使用 MyISAM。

  - 如果需要执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB。

  - Select count(*) from table Myisam会记录下来,Innodb会扫描全表(在有where条件下都一样)

  - myisam 表锁,基本行锁(如果在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表, 例如update table set num=1 where name like “%aaa%”)

  - MyISAM适合查询以及插入为主的应用,InnoDB适合频繁修改以及涉及到安全性较高的应用

  

《Mysql 引擎》的更多相关文章

  1. 简单物联网:外网访问内网路由器下树莓派Flask服务器

    最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...

  2. 利用ssh反向代理以及autossh实现从外网连接内网服务器

    前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...

  3. 外网访问内网Docker容器

    外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...

  4. 外网访问内网SpringBoot

    外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...

  5. 外网访问内网Elasticsearch WEB

    外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...

  6. 怎样从外网访问内网Rails

    外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...

  7. 怎样从外网访问内网Memcached数据库

    外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...

  8. 怎样从外网访问内网CouchDB数据库

    外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...

  9. 怎样从外网访问内网DB2数据库

    外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...

  10. 怎样从外网访问内网OpenLDAP数据库

    外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...

随机推荐

  1. 修改ip导致服务不可用

    修改ip导致服务不可用 1.修改hostsvi /etc/hosts 修改ip地址 2.lsnrctl start 后会发现The listener supports no services,解决方案 ...

  2. Halcon 1D测量

    1.产生测量句柄,准备提取与矩形(圆弧)主轴垂直的值边缘. gen_measure_rectangle2或gen_measure_arc 2.测量边缘对   ,测量的直线与矩形或者圆弧垂直 measu ...

  3. java-信息安全(六)-基于RSA理解数字签名示例

    概述 java-信息安全(四)-数据签名.数字证书 java-信息安全(五)-非对称加密算法RSA RSA工具类 使用java-信息安全(五)-非对称加密算法RSA项目中RSACoder 数字签名理解 ...

  4. Mybatis(一)走进Mybatis与FisrtExample

    前言 一直在使用,从未系统的总结起来.所以这里给大家带来的是mybatis的总结,系统大家能够对这个框架有一定的系统的学习与认识. mybatis和Hibernate应该是现在主流的ORM框架了. m ...

  5. Ubuntu16.04安装xgboost

    1.Python下安装方法 git clone --recursive https://github.com/dmlc/xgboost cd xgboost make -j4 cd python-pa ...

  6. 字符串时间与Unix时间戳相互转换

    字符串时间与Unix时间戳相互转换 /** * @Author: wangkun * @Date : 2016/1/21 13:43 * @Description : 字符串时间转换为Unix时间戳 ...

  7. 随笔:JS对象无new构造原理

    var myFun = function(words) { if (!(this instanceof myFun)) { return new myFun(words); } this.name = ...

  8. 找出相似的图片--C#

    请先参考我写到java这章 原理讲解 参考Neal Krawetz博士的这篇文章, 实现这种功能的关键技术叫做"感知哈希算法"(Perceptual Hash Algorithm) ...

  9. 自windows8以后,所有版本(专业版、企业版、旗舰版)都支持从 vhd 启动

    而在windows 7 中,只有:企业版.旗舰版: 支持 从 vhd 启动!

  10. 微信小程序中使用Async-await方法异步请求变为同步请求

    微信小程序中有些 Api 是异步的,无法直接进行同步处理.例如:wx.request.wx.showToast.wx.showLoading等.如果需要同步处理,可以使用如下方法: 注意: Async ...