MySQL存储引擎

来源:互联网 发布:爱淘宝怎么删除 编辑:程序博客网 时间:2024/05/29 08:48
同Oracle 和SQL Server等大型数据库系统一样,MySql也是客户/服务器系统并且是单进程多线程架构的数据库。

什么是存储引擎

    存储引擎说白了就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。
    在Oracle 和SQL Server等数据库中只有一种存储引擎,所有数据存储管理机制都是一样的。而MySql数据库提供了多种存储引擎。用户可以根据不同的需求为数据表选择不同的存储引擎,用户也可以根据自己的需要编写自己的存储引擎。

    我们可以指定DB默认引擎,而每个表又可以单独定制引擎。选择合适的引擎对DB的性能非常重要。

MySql中的存储引擎

1.MyISAM(常用)

    访问速度快,存储空间小,但不提供事务的支持,也不支持行级锁和外键。因此当执行Insert插入和Update更新语句时,即执行写操作的时候需要锁定这个表,所以会导致效率会降低。

    如果表的读操作远远多于写操作时,并且不需要事务的支持的,可以将MyIASM作为数据库引擎的首先。

    大批量的插入语句时(这里是INSERT语句)在MyIASM引擎中执行的比较的快,但是UPDATE语句在Innodb下执行的会比较的快,尤其是在并发量大的时候。

    每个MyISAM在磁盘上存储成3个文件,其中文件名和表名都相同,但是扩展名分别为:

    .frm(存储表定义)  .MYD(MYData,存储数据)  .MYI(MYIndex,存储索引)

2. InnoDB(常用)

    Innodb引擎提供了对数据库ACID事务的支持,并且还提供了行级锁和外键的约束。它的设计的目标就是处理大数据容量的数据库系统。Mysql运行的时候,Innodb会在内存中建立缓冲池,用于缓冲数据和索引。

    当需要使用数据库的事务时,该引擎就是首选。由于锁的粒度小,写操作是不会锁定全表的。所以在并发度较高的场景下使用会提升效率的。

    大容量的数据集时趋向于选择Innodb。因为它支持事务处理和故障的恢复。Innodb可以利用数据日志来进行数据的恢复。

3.memory

    在内存中创建数据表,访问速度非常快。但是存储容量有限,服务异常或关闭数据就有可能丢失。常做临时表用。

4.archive

    只支持插入和查询,速度非常快,适合做日志记录。


功  能

MYISAM

Memory

InnoDB

Archive

存储限制

256TB

RAM

64TB

None

支持事物

--

--

Yes

--

支持全文索引

Yes

--

--

--

B树索引

Yes

Yes

Yes

--

支持哈希索引

--

Yes

--

--

支持数据缓存

--

N/A

Yes

--

支持外键

--

--

Yes

--

索引缓存

Yes

Yes

Yes

--

数据可压缩

Yes

--

--

Yes

锁机制

表锁

表锁

行锁

行锁