MySQL-存储引擎

2021-07-01  本文已影响0人  Zeppelin421

概述

和大多数的数据库不同,MySQL中有一个存储引擎的概念,针对不同的存储需求可以选择最优的存储引擎。

存储引擎就是存储数据,建立索引,更新查询数据等技术的实现方式。存储引擎是基于表的,而不是基于库的。所以存储引擎也可被称为表类型。

Oracle,SqlServer等数据库只有一种存储引擎。MySQL提供了插件式的存储引擎架构,所以MySQL存在多种存储引擎,可以根据需要使用相应引擎或者编写存储引擎

MySQL5.0支持的存储引擎包含:InnoDB、MyISAM、BDB、MEMORY、MERGE、EXAMPLE、NDB Cluster、ARCHIVE、CSV、BLACKHOLE、FEDERATED等,其中InnoDB和BDB提供事务安全表,其他存储引擎是非事务安全表。

特性


InnoDB
InnoDB存储引擎是MySQL的默认引擎。InnoDB存储引擎提供了具有提交、回滚、崩溃恢复能力的事务安全。但是对比MyISAM引擎,InnoDB的写处理效率会差一些,并且会占用更多的磁盘空间以保留数据和索引。

InnoDB存储表和索引有两种方式:

MyISAM
MyISAM不支持事务、也不支持外键,其优势是访问的速度快,对事务的完整性没有要求或者以SELECT、INSERT为主的应用基本上都可以使用这个引擎来创建表。

存储方式:
每个MyISAM在磁盘上存储成3个文件、其文件名都和表名相同

MEMORY
Memory存储引擎将表的数据存放在内存中。每个Memory表实际对应一个磁盘文件,格式是.frm,该文件中只存储表的结构,而其数据文件都是存储在内存中,这样有利于数据的快速处理,提高整个表的效率。MEMORY类型的表访问非常快,因为他的数据是存放在内存中的,并且默认使用HASH索引,但是服务一旦关闭,表中的数据就回丢失。

MERGE
MERGE存储引擎是一组MyISAM表的组合,这些MyISAM表必须结构完全相同,MERGE表本身并没有存储数据,对MERGE类型的表可以进行查询、更新、删除操纵,这些操作实际上是对内部的MyISAM表进行的。

对于MERGE类型表的插入操作,是通过INSERT_METHOD子句定义插入的表,可以有3个不同的值,使用FIRST或LAST值使得插入操作被相应地作用在第一个或者最后一个表上,不定义这个子句或者定义为NO,表示不能对这个MERGE表执行插入操作。

可以对MERGE表进行DROP操作,但是这个操作只是删除了MERGE表的定义,对内部的表是没有任何影响的

create table order_1() engine = myisam default charset=utf8;
create table order_2() engine = myisam default charset=utf8;
create table order_all () engine = merge union = (order_1, order_2) INSERT_METHOD = LAST default charset = utf8;

引擎选择

选择引擎是应该根据应用系统的特点选择合适的引擎。对于复杂的应用系统,还可以根据实际情况选择多种存储引擎进行组合。

上一篇 下一篇

猜你喜欢

热点阅读