MySQL学习笔记(7):存储引擎[亲测有效]

MySQL学习笔记(7):存储引擎[亲测有效]本文更新于2019-06-23,使用MySQL 5.7,操作系统为Deepin 15.4。 和大多数数据库不同,插件式存储引擎是MySQL最重要的特性之一。 InnoDB InnoDB表提供事务安全。

MySQL学习笔记(7):存储引擎

本文更新于2019-06-23,使用MySQL 5.7,操作系统为Deepin 15.4。

和大多数数据库不同,插件式存储引擎是MySQL最重要的特性之一。

InnoDB

InnoDB表提供事务安全。

InnoDB表支持外键。创建外键时,要求父表必须有对应的索引,子表在创建外键时也会自动创建对应的索引。如父表被子表创建了外键索引,则父表的索引禁止被删除。在导入多个表的数据时,或在执行LOAD DATAALTER TABLE操作的时候,可以使用SET foreign_key_checks=0关闭外键检查。执行完后,使用SET foreign_key_checks=1重新打开。

InnoDB表自动增长列必需是索引,或组合索引的第一列。

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

  • 使用共享表空间存储:表结构保存在.frm文件中,数据和索引保存在innodb_data_home_dirinnodb_data_file_path定义的表空间中,可以是多个文件。
  • 使用多表空间存储:表结构保存在.frm文件中,每个表的数据和索引单独保存在.ibd文件中。如果是分区表,则每个分区对应单独的.ibd文件,文件名为“表名+分区名”,可以在创建分区的时候指定每个分区的文件位置。共享表空间仍然是必须的,InnoDB把内部数据词典和在线重做日志放在共享表空间中。

使用参数innodb_file_per_table可指定是否使用多表空间存储,并在重启服务器后,只且只对新建的表生效。使用多表空间存储的表,不能直接复制.frm和.ibd文件进行恢复,因为没有共享表空间的数据字典信息。但如恢复表到原来的数据库,可使用ALTER TABLE tablename DISCARD TABLESPACEALTER TABLE tablename IMPORT TABLESPACE

InnoDB表没有表元数据的缓存(如行数,因而执行COUNT(*)较慢)。

MyISAM

MyISAM表不支持事务,也不支持外键。

MyISAM表自动增长列可为组合索引的非第一列。

每个MyISAM在磁盘上存储成3个文件,数据文件和索引文件可以放置在不同的目录(需在创建表时通过DATA DIRECTORYINDEX DIRECTORY指定)。其文件名和表名相同,扩展名分别是:

  • .frm:存储表定义。
  • .MYD:MYData,存储数据。
  • .MYI:MYIndex,存储索引。

MyISAM表支持3种不同的存储格式:

  • 静态表:默认的存储格式,每条记录都是固定长度的。
  • 动态表:记录不是固定长度的,包含变长字段。
  • 压缩表:由myisampack工具创建,每条记录都被单独压缩。

MyISAM表有表元数据的缓存(如行数,因而执行COUNT(*)较快)。

MERGE

MERGE表是一组MyISAM表的组合,这些MyISAM表必须结构完全相同。MERGE表本身并没有数据,对其的任何操作实际上是对内部MyISAM表进行的。可以对MERGE表进行DROP操作,其只是删除表定义,对内部的表没有影响。

MERGE表在磁盘中保存两个文件,文件名以表名开始,.frm存储表定义,.MRG包含组合表的信息,包括MERGE表由哪些表组成、插入新数据时的依据。可以通过修改.MRG文件来修改MERGE表,但修改后需使用FLUSH TABLES刷新。

MEMORY

MEMORY表的数据放在内存中,每个MEMORY表只对应一个.frm磁盘文件。

在启动MySQL服务时使用--init-file选项,把INSERT INTO ... SELECTLOAD DATA INFILE写入文件中,就可在服务启动时从持久稳固的数据源装载表。定义MEMORY表的时候可通过MAX_ROWS指定表的最大行数。

NDB

NDB存储引擎在MySQL Cluster中使用。

常用存储引擎对比

特点 InnoDB MyISAM MERGE MEMORY NDB
存储限制 64TB 没有
事务安全 支持
锁机制 行锁 表锁 表锁 表锁 行锁
B树索引 支持 支持 支持 支持 支持
哈希索引 支持 支持
全文索引 支持
集群索引 支持
数据缓存 支持 支持 支持
索引缓存 支持 支持 支持 支持 支持
数据可压缩 支持
空间使用 N/A
内存使用 中等
批量插入速度
支持外键 支持

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/7652.html

(0)
上一篇 2023-03-16
下一篇 2023-03-16

相关推荐

  • 腾讯云数据平台_腾讯云计算服务

    腾讯云数据平台_腾讯云计算服务8月18日,由腾讯联合中国电子节能技术协会牵头研制的《键值型数据库系统技术及节能要求》团体标准(以下简称“团标”)正式对外发布。 该团标由腾讯发起,京东、金山云、北京邮电大学等多家企业和高校共同参与制

    2023-05-31
    166
  • MySQL5.7特性:JSON数据类型「建议收藏」

    MySQL5.7特性:JSON数据类型「建议收藏」概述 MySQL5.7的发行声明中,官方称之为里程碑式的版本,除了运行速度大幅度提升之外,还添加了之前版本没有的功能,如本文所述的原生JSON数据类型功能。 在此版本之前,MySQL所有的JSON数…

    2023-02-14
    151
  • MySQL介绍「终于解决」

    MySQL介绍「终于解决」什么是数据库? 作用:存储数据的,能够长期(断电,关机)保持数据。 数据存储在哪里:硬盘和内存 我们平时说的数据库:数据库管理系统(软件)(DataBase Manager System: DBS)…

    2023-04-10
    158
  • 用 Python 执行命令行

    用 Python 执行命令行在编程领域,与命令行打交道是必不可少的。不管是在 Unix/Linux,还是在 Windows 等操作系统中,通过命令行解决问题的玩家从未被淘汰。在 Python 中,执行命令行也非常简单。在本文中,我们将讨论用 Python 执行命令行及相关内容。

    2024-05-19
    74
  • 如何使用 SQL SELECT 从表中检索一个或多个数据列「终于解决」

    如何使用 SQL SELECT 从表中检索一个或多个数据列「终于解决」本文介绍了如何使用 SQL 的 SELECT 语句来检索单个表列、多个表列以及所有表列。也介绍了如何返回不同的值以及如何注释代码。 一、SELECT 语句 正如 学习 SQL 之前需要了解的基础知识

    2023-05-12
    116
  • 数据大屏设计工具_led大屏搭建教程

    数据大屏设计工具_led大屏搭建教程基于可视化搭建的方式来实现通用数据大屏搭建的解决方案,通过对平台能力的开发来讲解可视化搭建的核心功能实现,帮助有需要的同学了解可视化搭建的整体架构设计流程。

    2023-06-11
    144
  • 【JDBC】编程(2)-[通俗易懂]

    【JDBC】编程(2)-[通俗易懂]实现模糊查询(以“查哪个用户的密码中的第二个字符为‘a’为例)……

    2023-05-03
    145
  • 用Python的sort -k对文本进行快速排序

    用Python的sort -k对文本进行快速排序a href=”https://beian.miit.gov.cn/”苏ICP备2023018380号-1/a Copyright www.python100.com .Some Rights Reserved.

    2024-02-01
    102

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注