《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 安装并启动 ... 
随机推荐
- C#中怎么判断一个数组中是否存在某个数组值
			(1) 第一种方法: ,,}; ); // 这里的1就是你要查找的值 ) // 不存在 else // 存在 (2) 第二种方法: string[] strArr = {"a",& ... 
- python开发-与其他语言的比较
			1.关于函数 1)不需要指定返回类型,不需要指定是否有返回值,每个函数都有返回值,没有的话,就返回None 2)参数也可以不指定类型,可以有默认参数,但是必须放到最后,调用的时候指定参数的值,和顺序无 ... 
- 我在tmux中最不可少的配置: 用鼠标切换窗口/调节分屏大小
			前两天在给另外一个团队帮忙时,看他们在Rails日志.代码文件.git文件系统里面来回穿梭,觉得他们太累了,于是就介绍了 tmux 给他们用.但只讲了一点基本的开窗口.分屏,没给讲太多技巧,因为一下子 ... 
- <王川自选集第一卷电子书 >读书笔记
			什么叫限定自己能力的边界?就是接受承认一个事实,世界上大多数东西你并不懂,或者一知半解,懂得很肤浅.只有少数东西,由于你可以天天深入的接触,你才有深刻的理解. 购买一个公司的股票,却从未使用其核心产品 ... 
- JVM 内部原理(七)— Java 字节码基础之二
			JVM 内部原理(七)- Java 字节码基础之二 介绍 版本:Java SE 7 为什么需要了解 Java 字节码? 无论你是一名 Java 开发者.架构师.CxO 还是智能手机的普通用户,Java ... 
- vue条件与循环
			通过vue控制切换一个元素的显示也相当简单: <div id="app-3"> <p v-if="seen">Now you see m ... 
- 奇淫怪巧之在Delphi中调用不申明函数
			前一阵子,研究了一段时间的Win32Asm,研究到后来发现Win32的ASM实际上还是和C版的介绍的一样.甚至还封装了一个简版的类似VCL库结构框架的32ASM结构库,不过搞着搞着就没兴趣了,也没继续 ... 
- Mac获取公网ip
			终端输入 curl http://members.3322.org/dyndns/getip way 2: ➜ ~ wget http://ipecho.net/plain -O - -q ; ech ... 
- laravel 5 : Class 'input' not found
			在配置文件中:config\app.php 加上 'Input' => Illuminate\Support\Facades\Input::class, 或者 引用 :use Illumina ... 
- 【12月26日】A股滚动市盈率PE最低排名
			深康佳A(SZ000016) - 滚动市盈率PE:1.47 - 滚动市净率PB:0.98 - 滚动年化股息收益率:4.97% - 消费电子产品 - 深康佳A(SZ000016)的历史市盈率走势图 华菱 ... 
