day8-MySQL存储引擎

好久不见. 提交于 2020-02-22 17:36:54

教程链接:http://c.biancheng.net/view/2361.html

什么是存储引擎

数据库存储引擎是数据库底层软件组件,数据库管理系统使用数据引擎进行创建、查询、更新和删除数据操作。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎还可以获得特定的功能。

提示:InnoDB 事务型数据库的首选引擎,支持事务安全表(ACID),支持行锁定和外键。MySQL 5.5.5 之后,InnoDB 作为默认存储引擎。

MyISAM 是基于 ISAM 的存储引擎,并对其进行扩展,是在 Web、数据仓储和其他应用环境下最常使用的存储引擎之一。MyISAM 拥有较高的插入、查询速度,但不支持事务。

MySQL存储引擎种类

存储引擎能够根据具体的应用建立不同存储引擎表。

 1 #存储引擎种类
 2 InnoDB
 3 MyISAM
 4 MEMORY
 5 ARCHIVE
 6 FEDERATED
 7 EXAMPLE
 8 BLACKHOLE
 9 MERGE
10 NDBCLUSTER
11 CSV

其他分支

percona  : XtraDB
MariaDB  : InnoDB
其他的引擎:
TokuDB , MyRocks 
Compression: 25x for high compression
Fast Insertions and Deletions
适合于,业务当中有大量插入或者删除操做的场景。
应用于,数据量较大的业务。
功能MylSAMMEMORYInnoDBArchive
存储限制 256TB RAM 64TB None
支持事务 No No Yes No
支持全文索引 Yes No No No
支持树索引 Yes Yes Yes No
支持哈希索引 No Yes No No
支持数据缓存 No N/A Yes No
支持外键 No No Yes No

InnoDB **

MySQL 5.5或更高版本的默认存储引擎。

  • 支持 事务,其特点是 行锁设计、支持外键

  • 支持全文索引

  • 支持 非锁定读,即默认读取操作不会产生锁

  • 高并发,高性能,高可用,高可拓展

  • 采用了聚集的方式,每张表都是按主键的顺序进行存放,如果没有显式的指定主键,它会为表的每一行生成一个6字节的ROWID作为主键

MyISAM

  • 不支持事务、表锁设计

  • 支持全文索引

  • 缓冲池只缓冲索引文件,不缓冲数据文件

  • 存储引擎表由MYDMYI组成,MYD用来存放数据文件,MYI用来存放索引文件

NDB

  • 是一个集群存储引擎,结构是share nothing的集群架构,具备更高的可用性

  • 数据全部存放在内存中,可以将非索引数据存放在磁盘上

  • 主键查找

  • 不适合连接操作(Join)。ps: MySQL数据库层完成,而不是存储索引层,复杂的连接需要巨大的网络开销,因此查询速度很慢。

Memory

  • 数据存放在内存中,断电后消失,查询速度快,适合存储临时数据

  • 默认使用哈希索引

  • 只支持表锁,并发性能

  • varchar类型是按照定常字段(char)的方式存储,会浪费内存

存储引擎的基础管理命令

使用 select 确认会话存储引擎

select @@default_storage_engine;
+--------------------------+
| @@default_storage_engine |
+--------------------------+
| InnoDB                   |
+--------------------------+
1 row in set (0.00 sec)

默认存储引擎修改

 注:不代表生产操作

会话级别

select @@default_storage_engine;
+--------------------------+
| @@default_storage_engine |
+--------------------------+
| InnoDB                   |
+--------------------------+
1 row in set (0.00 sec)

全局级别

注:仅影响新会话

 

set global default_storage_engine=myisam;
Query OK, 0 rows affected (0.00 sec)

#查看存储引擎
select @@default_storage_engine;
+--------------------------+
| @@default_storage_engine |
+--------------------------+
| MyISAM                   |
+--------------------------+
1 row in set (0.00 sec)

重启之后,所有参数均失效

永久生效

写入配置文件

vim /etc/my.conf
[mysqld]
default_storage_engine=myisam

注:存储引擎是表级别的,每个表创建时可以指定不同的存储引擎,但是我们建议统一为innodb.

SHOW确认表的存储引擎

create table xx (id int) engine=myisam;
create table x (id int);

SHOW CREATE TABLE x\G;
SHOW TABLE STATUS LIKE 'xx'\G

INFORMATION_SCHEMA 确认表的存储引擎

select table_schema,table_name ,engine 
from information_schema.tables 
where table_schema 
not in ('sys','mysql','information_schema','performance_schema');

修改一个表的存储引擎

alter table x engine=innodb;
Query OK, 0 rows affected (0.18 sec)
Records: 0  Duplicates: 0  Warnings: 0

注:此命令我们经常使用他,进行innodb表的碎片整理

平常处理过的mysql问题

环境:centos7.4,MySQL 5.7.20,InnoDB存储引擎

业务特点:数据量级较大,经常需要按月删除历史数据.

问题:磁盘空间占用很大,不释放

处理方法:以前:将数据逻辑导出,手工drop表,然后导入进去

现在:对表进行按月进行分表(partition,中间件)或者归档表(pt-archive)业务替换为truncate方式

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!