入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

Miss 带你了解 MySQL存储引擎

创建时间:2017-12-17 投稿人: 18774319889 浏览次数:396

Miss 带你了解 MySQL存储引擎

存储引擎其实就是如何存储数据,如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。因为在关系数据库中数据是以表的形式存储的,所以存储引擎也可以成为表类型。在oracle和sqlserver等数据库中只有一种存储引擎,所以数据存储管理机制都是一样的;而MySQL数据库提供了多种存储引擎。用户可以根据不同的需求为数据表选择不同的存储引擎,用户也可以根据需要编写自己的存储引擎。

mysql存储引擎的概念

MySQL中的数据用各种不同的技术存储在文件中,这些技术中的每一项技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的、不同的功能和能力。这些不同的技术以及配套的相关功能在MySQL中被称为存储引擎,可以预先设置或者在MySQL服务武器中启动。

查询MySQL中支持的存储引擎

  • 查询支持的全部存储引擎。

Miss 带你了解 MySQL存储引擎

SHOW ENGINES

当使用 show engines G;时

Miss 带你了解 MySQL存储引擎

show engines G;

从查询结果可以看出,MySQL支持多个存储引擎,其中InnoDB为默认存储引擎。

  • 查询默认的存储引擎

Miss 带你了解 MySQL存储引擎

MYSQL有多个可用的存储引擎,下面主要介绍InnoDB、MyISAM、MEMORY3种存储引擎

InnoDB

InnoDB已经开发了十余年,遵循GNU通用公开许可(GPL)发行。已经被很多大型公司采用。InnoDB给MySQL提供了事务、回滚、崩溃修复能力和多版本并发控制的事务安全。InnoDB是MySQL上第一个提供外键约束的表引擎,而且InnoDB的事务处理能力也是MySQL其他存储引擎无法比拟的。

  • 支持ACID事务,支持行级锁定。事务处理即原子性。

    行级锁定(你执行update语句是,只会将这一条记录进行锁定,只有针对这条记录的其他写入、更新操作会被阻塞并等待这条update语句执行完毕后再执行,针对其他记录的写入操作不会有影响。)

  • 为处理巨大数据量时的最大性能设计。

  • InnoDB存储引擎完全与MySQL服务器整合。

  • InnoDB存储它的表&索引在一个表空间中,表空间可以包含数个文件(或原始磁盘分区)。

  • innodb通过使用MVCC来获取高并发性,并且实现sql标准的4种隔离级别,同时使用一种被称成next-key locking的策略来避免换读(phantom)现象。除此之外innodb引擎还提供了插入缓存(insert buffer)、二次写(double write)、自适应哈西索引(adaptive hash index)、预读(read ahead)等高性能技术。

  • 在技术上,InnoDB 是一套放在 MySQL后台的完整数据库系统,InnoDB 在主内存中建立其专用的缓冲池用于高速缓冲数据和索引。

Miss 带你了解 MySQL存储引擎

MyISAM

  • MyISAM不支持事务

  • MyISAM只支持表级锁,所以不会出现死锁的问题。主要用于高负载的select。

表级锁(直接锁定整张表,在锁定期间,其他进程无法对该表进行写操作,如果设置的是写锁,那么其他进程读也不允许)

  • MyISAM引擎不支持外键

  • MyISAM引擎的表在大量高并发的读写下会经常出现表损坏的情况

  • 对于count()查询来说MyISAM更有优势

因为MyISAM存储了表中的行数记录,执行SELECT COUNT() 的时候可以直接获取到结果,而InnoDB需要扫描全部数据后得到结果。

但是注意一点:对于带有WHERE 条件的 SELECT COUNT()语句两种引擎的表执行过程是一样的,都需要扫描全部数据后得到结果

  • InnoDB是为处理巨大数据量时的最大性能设计,它的CPU效率可能是任何其它基于磁盘的关系数据库引擎所不能匹敌的。

  • MyISAM支持全文索引(FULLTEXT),InnoDB不支持

  • MyISAM引擎的表的查询、更新、插入的效率要比InnoDB高

因此,当你的数据库有大量的写入、更新操作而查询比较少或者数据完整性要求比较高的时候就选择InnoDB表。当你的数据库主要以查询为主,相比较而言更新和写入比较少,并且业务方面数据完整性要求不那么严格,就选择MyISAM表。因为MyISAM表的查询操作效率和速度都比InnoDB要快

MEMORY

  • memory存储引擎相比前面的一些存储引擎,有点不一样,其使用存储在内从中的数据来创建表,而且所有的数据也都存储在内存中。

  • 每个基于memory存储引擎的表实际对应一个磁盘文件,该文件的文件名和表名是相同的,类型为.frm。该文件只存储表的结构,而其数据文件,都是存储在内存中,这样有利于对数据的快速处理,提高整个表的处理能力。

  • memory存储引擎默认使用哈希(HASH)索引,其速度比使用B-+Tree型要快,如果读者希望使用B树型,则在创建的时候可以引用。

  • memory存储引擎文件数据都存储在内存中,如果mysqld进程发生异常,重启或关闭机器这些数据都会消失。所以memory存储引擎中的表的生命周期很短,一般只使用一次。

声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
  • 上一篇:没有了
  • 下一篇:没有了