一:什么是引擎?

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

  - 在 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. 【Unity】讯飞语音识别SDK

    1.进入讯飞官网,注册帐号,进入控制台,创建新应用UnityXunfeiDemo,平台选Android.在当前应用这点下载SDK,添加AI能力(添加新服务),选择语音听写,即可下载安卓SDK(下称讯飞 ...

  2. Socket阻塞模式和非阻塞模式的区别

    简单点说: 阻塞就是干不完不准回来,    非组赛就是你先干,我现看看有其他事没有,完了告诉我一声 我们拿最常用的send和recv两个函数来说吧... 比如你调用send函数发送一定的Byte,在系 ...

  3. 查看SQL SERVER数据库的连接数

    1,查看连接到‘TestDB2’数据库的连接 select * from master.dbo.sysprocesses where dbid = DB_ID('TestDB2') *查询某个数据库用 ...

  4. CSS初始化示例代码

    CSS初始化示例代码 /* css reset www.admin10000.com */ body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code, ...

  5. snopy 数据库简介

    snoRNA ,small nucleolar RNA, 核仁小分子RNA, 是一类在细胞核内的small non-coding RNA, 长度在60-300nt, 其主要功能是调控其他小RNA分子( ...

  6. MySQL数据库远程访问权限如何打开(两种方法)

    在我们使用mysql数据库时,有时我们的程序与数据库不在同一机器上,这时我们需要远程访问数据库.缺省状态下,mysql的用户没有远程访问的权限. 下面介绍两种方法,解决这一问题. 1.改表法 可能是你 ...

  7. [Bayes] Point --> Hist: Estimate "π" by R

    Verify the Monte Carlo sampling variability of "π". p = π/4 与 所得 0.7854 比较接近,故满足 Central L ...

  8. 解决pycharm在ubuntu下搜狗输入法一直固定在左下角的问题

    1.缩放VMware,当ubuntu中出现下拉导航条时,点击左上角查看>立即适应客户机,然后在pycharm中打中文的时候不用全屏,就可以看到输入法显示的文字了. 2.目前没有发现搜狗输入法版本 ...

  9. Puppet软件资源管理

    1.实现的功能:     管理那些软件包被安装,那些软件包被卸载     管理软件包是否更新     要求系统配置yum源(RedHat系统).zypper源(Suse系统)等等 2.可用参数: en ...

  10. Visual Studio(C#)快捷键与Eclipse(JAVA)快捷键对比

    Visual Studio与Eclipse快捷键对比   Visual Studio Eclipse 代码提示: Ctrl+J Ctrl+空格键 / Alt+/ .abcdefghijklmnopqr ...