《Mysql 引擎》
一:什么是引擎?
- 就是一种数据存取和处理方式。
- 在 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 引擎》的更多相关文章
- 简单物联网:外网访问内网路由器下树莓派Flask服务器
最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...
- 利用ssh反向代理以及autossh实现从外网连接内网服务器
前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...
- 外网访问内网Docker容器
外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...
- 外网访问内网SpringBoot
外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...
- 外网访问内网Elasticsearch WEB
外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...
- 怎样从外网访问内网Rails
外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...
- 怎样从外网访问内网Memcached数据库
外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...
- 怎样从外网访问内网CouchDB数据库
外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...
- 怎样从外网访问内网DB2数据库
外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...
- 怎样从外网访问内网OpenLDAP数据库
外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...
随机推荐
- 修改ip导致服务不可用
修改ip导致服务不可用 1.修改hostsvi /etc/hosts 修改ip地址 2.lsnrctl start 后会发现The listener supports no services,解决方案 ...
- Halcon 1D测量
1.产生测量句柄,准备提取与矩形(圆弧)主轴垂直的值边缘. gen_measure_rectangle2或gen_measure_arc 2.测量边缘对 ,测量的直线与矩形或者圆弧垂直 measu ...
- java-信息安全(六)-基于RSA理解数字签名示例
概述 java-信息安全(四)-数据签名.数字证书 java-信息安全(五)-非对称加密算法RSA RSA工具类 使用java-信息安全(五)-非对称加密算法RSA项目中RSACoder 数字签名理解 ...
- Mybatis(一)走进Mybatis与FisrtExample
前言 一直在使用,从未系统的总结起来.所以这里给大家带来的是mybatis的总结,系统大家能够对这个框架有一定的系统的学习与认识. mybatis和Hibernate应该是现在主流的ORM框架了. m ...
- Ubuntu16.04安装xgboost
1.Python下安装方法 git clone --recursive https://github.com/dmlc/xgboost cd xgboost make -j4 cd python-pa ...
- 字符串时间与Unix时间戳相互转换
字符串时间与Unix时间戳相互转换 /** * @Author: wangkun * @Date : 2016/1/21 13:43 * @Description : 字符串时间转换为Unix时间戳 ...
- 随笔:JS对象无new构造原理
var myFun = function(words) { if (!(this instanceof myFun)) { return new myFun(words); } this.name = ...
- 找出相似的图片--C#
请先参考我写到java这章 原理讲解 参考Neal Krawetz博士的这篇文章, 实现这种功能的关键技术叫做"感知哈希算法"(Perceptual Hash Algorithm) ...
- 自windows8以后,所有版本(专业版、企业版、旗舰版)都支持从 vhd 启动
而在windows 7 中,只有:企业版.旗舰版: 支持 从 vhd 启动!
- 微信小程序中使用Async-await方法异步请求变为同步请求
微信小程序中有些 Api 是异步的,无法直接进行同步处理.例如:wx.request.wx.showToast.wx.showLoading等.如果需要同步处理,可以使用如下方法: 注意: Async ...