栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

MySQL(2)——存储引擎

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MySQL(2)——存储引擎

MySQL(2)——存储引擎

存储引擎其实就是如何存储数据,如何为存储的数据建立索引和如何更新/如何查询数据等技术等的方法,因为关系数据库中数据上以表的形势存储的,所有存储引擎也可以成为表类型。

查看MySQL中支持的存储引擎
  1. 使用show engines 可以查看MySQL中支持的存储引擎
mysql> show engines g
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
| FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
| MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
| CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
9 rows in set (0.01 sec)

查询结果中engine参数值的就是存储引擎的名称,support参数值的是MySQL是否支持该类引擎,YES表示支持,Commit参数值对该引擎对评论,从查询结果中可以看出,MySQL中支持多个存储引擎,其中InnoDB为默认的存储引擎。
2. show variables 方式

mysql> show variables like 'have%';
+------------------------+----------+
| Variable_name          | Value    |
+------------------------+----------+
| have_compress          | YES      |
| have_dynamic_loading   | YES      |
| have_geometry          | YES      |
| have_openssl           | YES      |
| have_profiling         | YES      |
| have_query_cache       | NO       |
| have_rtree_keys        | YES      |
| have_ssl               | YES      |
| have_statement_timeout | YES      |
| have_symlink           | DISABLED |
+------------------------+----------+
10 rows in set (0.02 sec)
InnoDB存储引擎

从Mysql5.5版本开始,InnoDB是默认的表存储引擎。其特点是行锁设计、支持MVCC、支持外键、提供一致性非锁定读、同时被设计用来最有效的利用以及使用内存和CPU。
它的特点如下:

  • InnoDB 存储引擎支持自动增长列AUTO_INCREMENT。自动增长的值不能为空,且必须唯一。
  • InnoDB存储引擎支持外键。
  • InnoDB存储引擎提供了良好的事务管理系/崩溃修复能力/并发控制,缺点是读写效率稍差,占用的数据空间相对较大。

InnoDB是以下情况的理想引擎:

  • 更新密集的表
  • 事务:InnoDB存储引擎是唯一支持事务的标准MySQL存储引擎,这是管理敏感数据的必须软件。
  • 自动灾难恢复:与其他引擎不同,InnoDB表能够自动从灾难中恢复,虽然MyISAM表能在灾难后恢复,但是它的过程需要长很多。
MyISAM 存储引擎

MyISAM 是MySQL中常见的存储引擎,它曾是MySQL的默认存储引擎。它是基于ISAM存储引擎发展起来的。

MyISAM存储引擎的文件类型

MyISAM存储引擎的表存储为三个文件,文件的名字与表名相同。扩展名包括frm/MYD/MYI。

  • frm :存储表的结构
  • myd:存储结构,是MYData的缩写。
  • myi :存储索引,是MYIndex的缩写。
存储格式

基于MyISAM存储引擎的表支持3中不同的存储格式,包括静态型/动态性/压缩性。

  • 静态型
    静态格式是MyISAM表的默认存储格式。当表不包含变量长度列(VARCHAR, BLOB, 或TEXT)时,使用这个格式。每一行用固定字节数存储。静态格式是三种存储格式中最简单和最安全的,同时也是最快的ondisk格式。
    基本特征:
    (1)CHAR列对列宽度为空间填补
    (2)快速。
    (3)容易缓存。
    (4)由于每个记录位置固定,崩溃后容易重建。(5)无必要重新组织,通常比动态表需要更大的磁盘空间。
  • 动态型
    如果有表列定义为动态的,MySQL就回自动使用动态格式,虽然MyISAM动态表占用的空间比静态表锁占用少,但是空间的节省回影响性能,如果某个字段的内容发生改变,则其位置很可能就要移动,这回导致碎片的产生,随着碎片的越来越多,数据访问的性能就会相应的降低。
    修复方式:
    (1)尽可能使用静态数据类型
    (2)经常使用OPTIMIZE TABLE 语句,它会整理表的碎片,恢复由于表更新和删除导致的空间丢失
  • 压缩型
    有时会创建在整个应用程序生命周期中都只读的表,如果是这种情况,就可以使用myisampack工具将其转换为压缩表来减少空间,在制定硬件配置下,性能的提升相当明显。
优缺点

优点是占用空间小,处理速度快。缺点是不支持事务的完整性和并发性。

MEMORY存储引擎

MEMORY存储引擎是一种特殊的存储引擎,它使用存储在内存中的内容来创建表,而且所有数据也是放在内存中,这些特性都与InnoDB存储索引/MyISAM存储索引不同。

  1. MEMORY存储引擎的文件存储形式。
    每个机遇MEMORY存储引擎的表实际上对应一个磁盘文件,该文件的文件名与庙名相同,类型为frm,该文件值存储表的结构,而其数据文件,都是存储在内容中,这样有利于对数据的快速处理,提高效率,需要注意的是,服务器需要足够的内存来维持MEMORY存储引擎的使用。
  2. MEMORY存储引擎的索引类型
    MEMORY默认存储引擎为哈希索引,速度要比B型树索引要快。
  3. MEMORY存储引擎的优缺点
    MEMORY表的大小是收到限制的。表的大小取决于两个参数,分别是max_rows和max_heap_table_size,前者在创建表的时候可以指定,后者默认为16MB,可以根据需求扩大。
    由于其存在于内存中的特性,所有该类表的处理速度非常快,但是数据容易丢失,生命周期短。
    MEMORY不支持VARCHAR/BLOB/TEXT数据类型,因为这些表类型按固定长度的记录格式存储。
如何选择存储引擎

每个存储引擎都有各自的特点,选择合适的即可。

  • InnoDB存储引擎可以用于事务处理的应用程序,具有众多特性,包括ACID事务支持/支持外键。
  • MyISAM存储引擎:管理非事务表,它提供高速存储和检索,以及全文搜索能力。
  • MEMORY存储引擎:数据都在内存中,处理速度比快,但是安全性不高,如果需要很快的读写但是对安全性要求不高,可以选择它。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1039899.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号