《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 安装并启动 ...
随机推荐
- 浅谈.net中事务
.net中的事务 关键几点 概念:1:什么是事务 2:什么时候用事务 3:基本的语法 (1): 事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit).事务通常 ...
- buildroot 编译问题
buildroot 编译的时候,出现 g++: internal compiler error: Killed (program cc1plus) 这个是因为虚拟机内存不足的原因, 加上一些内存即可 ...
- 提一下InfoQ
昨天在微信读书中整理了一个"架构师"清单,把InfoQ中文社区这两年发布的电子书整理到了一起,分享给了团队成员. 如果你去研究InfoQ中文社区,就会发现其中一个人与之因缘际会的相 ...
- Java多线程:SimpleDateFormat
一.SimpleDateFormat的线程安全问题 为什么SimpleDateFormat是线程不安全的? 下面通过一个案例代码来说明 public class DateUtilTest { publ ...
- 聊聊Python中的is和==
首先,Python中的is就是判断地址是否相等(相当于Java中的==),Python中的==就是判断数值是否相等(相当于Java中的equals). 看个简单的例子: a = [1, 2, 3] b ...
- android中通过intent传递复杂数据
android中在各个service或者acitivity之间可以通过Intent来传递一些数据,intent原生直接提供了一些简单数据类型的数据的传递,使用起来也很方便,比如int boolean ...
- [微信开发] 微信JSAPI - 获取用户地理位置信息
参考博客 http://blog.csdn.net/u013142781/article/details/50503299 主要JS 方法 wx.getLocation 获取地理位置信息传递参数 成功 ...
- Go指南练习_循环与函数
源地址 https://tour.go-zh.org/flowcontrol/8 一.练习题描述 为了练习函数与循环,我们来实现一个平方根函数:用牛顿法实现平方根函数. 计算机通常使用循环来计算 x ...
- Python套接字编程(1)——socket模块与套接字编程
在Python网络编程系列,我们主要学习以下内容: 1. socket模块与基本套接字编程 2. socket模块的其他网络编程功能 3. SocketServer模块与简单并发服务器 4. 异步编程 ...
- python 简单的server请求
1.代码 #!/usr/bin/env python3 # -*- coding: utf-8 -*- # __author henry # __date 2018/11/4 from wsgiref ...