`

mysql存储引擎简单介绍

阅读更多

 

     大家从别的地方也可以看到。

       MySQL5.5以后默认使用InnoDB存储引擎,其中InnoDB和BDB提供事务安全表,其它存储引擎都是非事务安全表。
     若要修改默认引擎,可以修改配置文件中的default-storage-engine。可以通过:show variables like 'default_storage_engine';查看当前数据库到默认引擎。命令:show enginesshow variables like 'have%'可以列出当前数据库所支持到引擎。其中Value显示为disabled的记录表示数据库支持此引擎,而在数据库启动时被禁用。在MySQL5.1以后,INFORMATION_SCHEMA数据库中存在一个ENGINES的表,它提供的信息与show engines;语句完全一样,可以使用下面语句来查询哪些存储引擎支持事物处理:select engine from information_chema.engines where transactions = 'yes';
可以通过engine关键字在创建或修改数据库时指定所使用到引擎。
主要存储引擎:MyISAM、InnoDB、MEMORY和MERGE介绍:
在创建表到时候通过engine=...type=...来指定所要使用到引擎。show table status from DBname来查看指定表到引擎。

(一)MyISAM
  
它不支持事务,也不支持外键,尤其是访问速度快,对事务完整性没有要求或者以SELECT、INSERT为主的应用基本都可以使用这个引擎来创建表。
每个MyISAM在磁盘上存储成3个文件,其中文件名和表名都相同,但是扩展名分别为:

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

  数据文件和索引文件可以放置在不同的目录,平均分配IO,获取更快的速度。要指定数据文件和索引文件的路径,需要在创建表的时候通过DATA DIRECTORYINDEX DIRECTORY语句指定,文件路径需要使用绝对路径。
  每个MyISAM表都有一个标志,服务器或myisamchk程序在检查MyISAM数据表时会对这个标志进行设置。MyISAM表还有一个标志用来表明该数据表在上次使用后是不是被正常的关闭了。如果服务器以为当机或崩溃,这个标志可以用来判断数据表是否需要检查和修复。如果想让这种检查自动进行,可以在启动服务器时使用--myisam-recover现象。这会让服务器在每次打开一个MyISAM数据表是自动检查数据表的标志并进行必要的修复处理。MyISAM类型的表可能会损坏,可以使用CHECK TABLE语句来检查MyISAM表的健康,并用REPAIR TABLE语句修复一个损坏到MyISAM表。
  MyISAM的表还支持3种不同的存储格式:

  • 静态(固定长度)表
  • 动态表
  • 压缩表

  其中静态表是默认的存储格式。静态表中的字段都是非变长字段,这样每个记录都是固定长度的,这种存储方式的优点是存储非常迅速,容易缓存,出现故障容易恢复;缺点是占用的空间通常比动态表多。静态表在数据存储时会根据列定义的宽度定义补足空格,但是在访问的时候并不会得到这些空格,这些空格在返回给应用之前已经去掉。同时需要注意:在某些情况下可能需要返回字段后的空格,而使用这种格式时后面到空格会被自动处理掉。
  动态表包含变长字段,记录不是固定长度的,这样存储的优点是占用空间较少,但是频繁到更新删除记录会产生碎片,需要定期执行OPTIMIZE TABLE语句或myisamchk -r命令来改善性能,并且出现故障的时候恢复相对比较困难。
  压缩表由myisamchk工具创建,占据非常小的空间,因为每条记录都是被单独压缩的,所以只有非常小的访问开支。
(二)InnoDB
  
InnoDB存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。但是对比MyISAM的存储引擎,InnoDB写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引。
1)自动增长列:
  
InnoDB表的自动增长列可以手工插入,但是插入的如果是空或0,则实际插入到则是自动增长后到值。可以通过"ALTER TABLE...AUTO_INCREMENT=n;"语句强制设置自动增长值的起始值,默认为1,但是该强制到默认值是保存在内存中,数据库重启后该值将会丢失。可以使用LAST_INSERT_ID()查询当前线程最后插入记录使用的值。如果一次插入多条记录,那么返回的是第一条记录使用的自动增长值。
对于InnoDB表,自动增长列必须是索引。如果是组合索引,也必须是组合索引的第一列,但是对于MyISAM表,自动增长列可以是组合索引的其他列,这样插入记录后,自动增长列是按照组合索引到前面几列排序后递增的。
2)外键约束:
  
MySQL支持外键的存储引擎只有InnoDB,在创建外键的时候,父表必须有对应的索引,子表在创建外键的时候也会自动创建对应的索引。
      在创建索引的时候,可以指定在删除、更新父表时,对子表进行的相应操作,包括restrict、cascade、set nullno action。其中restrict和no action相同,是指限制在子表有关联的情况下,父表不能更新;casecade表示父表在更新或删除时,更新或者删除子表对应的记录;set null 则表示父表在更新或者删除的时候,子表对应的字段被set null。
  当某个表被其它表创建了外键参照,那么该表对应的索引或主键被禁止删除。
  可以使用set foreign_key_checks=0;临时关闭外键约束,set foreign_key_checks=1;打开约束。
(三)MEMORY
  
memory使用存在内存中的内容来创建表。每个MEMORY表实际对应一个磁盘文件,格式是.frm。MEMORY类型的表访问非常快,因为它到数据是放在内存中的,并且默认使用HASH索引,但是一旦服务器关闭,表中的数据就会丢失,但表还会继续存在。
      默认情况下,memory数据表使用散列索引,利用这种索引进行“相等比较”非常快,但是对“范围比较”的速度就慢多了。因此,散列索引值适合使用在"="和"<=>"的操作符中,不适合使用在"<"或">"操作符中,也同样不适合用在order by字句里。如果确实要使用"<"或">"或betwen操作符,可以使用btree索引来加快速度。
  存储在MEMORY数据表里的数据行使用的是长度不变的格式,因此加快处理速度,这意味着不能使用BLOB和TEXT这样的长度可变的数据类型。VARCHAR是一种长度可变的类型,但因为它在MySQL内部当作长度固定不变的CHAR类型,所以可以使用。

  使用USING HASH/BTREE来指定特定到索引。

create index mem_hash using hash on tab_memory(city_id);

 

  在启动MySQL服务的时候使用--init-file选项,把insert into...select或load data infile 这样的语句放入到这个文件中,就可以在服务启动时从持久稳固的数据源中装载表。
  服务器需要足够的内存来维持所在的在同一时间使用的MEMORY表,当不再使用MEMORY表时,要释放MEMORY表所占用的内存,应该执行DELETE FROM或truncate table或者删除整个表。
  每个MEMORY表中放置到数据量的大小,受到max_heap_table_size系统变量的约束,这个系统变量的初始值是16M,同时在创建MEMORY表时可以使用MAX_ROWS子句来指定表中的最大行数。
(四)MERGE
  
merge存储引擎是一组MyISAM表的组合,这些MyISAM表结构必须完全相同,MERGE表中并没有数据,对MERGE类型的表可以进行查询、更新、删除的操作,这些操作实际上是对内部的MyISAM表进行操作。对于对MERGE表进行的插入操作,是根据INSERT_METHOD子句定义的插入的表,可以有3个不同的值,first和last值使得插入操作被相应的作用在第一个或最后一个表上,不定义这个子句或者为NO,表示不能对这个MERGE表进行插入操作。可以对MERGE表进行drop操作,这个操作只是删除MERGE表的定义,对内部的表没有任何影响。MERGE在磁盘上保留2个以MERGE表名开头文件:.frm文件存储表的定义;.MRG文件包含组合表的信息,包括MERGE表由哪些表组成,插入数据时的依据。可以通过修改.MRG文件来修改MERGE表,但是修改后要通过flush table刷新。

 

分享到:
评论

相关推荐

    可插式存储引擎MySQL走向企业级保障

    当用户将数据库应用到各个不同的领域时,每一种应用都对数据库提出了满足自己需求的性能特点,而MySQL的插件式存储引擎正是针对此而推出的。使用MySQL插件式存储引擎体系结构,允许数据库专业人员为特定的应用需求...

    mysql插件式存储引擎体系结构

    使用MySQL 插件式存储引擎体系结构,允许数据库专业人员为特定的应用需求选择专门的 存储引擎,完全不需要管理任何特殊的应用编码要求。采用MySQL 服务器体系结构,由于 在存储级别上提供了一致和简单的应用模型和...

    编写一个简单的mysql存储引擎1

    数组中红框的名字必须与步骤1中红框内定义的名字保持一致3、最后在定义存储引擎时,红框部分使用步骤2定义的变量数组,通过“show variables”语句可查看

    alienxcn#ZXBlog#MYSQL存储引擎1

    // 查看默认的存储引擎演示:关于MyISAM和InnoDB的简单对比:问:MyISAM和InnoDB引擎的区别MyISAM 是非事务安全型的,而 InnoDB

    简单了解MySQL存储引擎

    主要介绍了MySQL存储引擎的相关资料,为开发时选择合适的存储引擎提供参考,感兴趣的朋友可以了解下

    MySQL 学习总结 之 初步了解 InnoDB 存储引擎的架构设计

    而现在互联网中,基本都是使用 InnoDB 存储引擎,所以接下来我将简单总结自己关于 InnoDB 存储引擎的学习,比较简单的介绍 InnoDB 存储引擎里面的组件。 二、缓冲池 我们现在都知道了,数据库的数据是存放在磁盘文件...

    MySQL存储引擎总结

    前言 在数据库中存的就是一张张有着千丝万缕关系的表,所以表设计的好坏,将直接影响着整个数据库。而在设计表的时候,我们都会关注一个问题,使用什么存储...对于MySQL来说,它提供了很多种类型的存储引擎,我们可以根

    MySQL性能调优与架构设计(中文版)

     第3章 MySQL存储引擎简介   3.0 引言   3.1 MySQL存储引擎概述   3.2 MyISAM存储引擎简介   3.3 InnoDB存储引擎简介   第4章 MySQL安全管理  4.0 引言  4.1 数据库系统安全相关因素  4.2 ...

    MySQL安装手顺(包含安装过程 + 配置数据库存储引擎)

    自制的MySQL安装过程记录,简单好用。

    MYSQL 解锁与锁表介绍

    相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制。比如,MyISAM和MEMORY存储引擎采用的是表级锁(table-level locking);BDB存储引擎采用的是页面锁(page-level ...

    mysql面试必会必考题

    Q1:MySQL 的逻辑架构了解吗? Q2:谈一谈 MySQL 的读写锁 Q3:MySQL 的锁策略有什么?...除了会解析外键定义的 InnoDB 外,存储引擎不会解析 SQL,不同存储引擎之间也不会相互通信,只是简单响应上层服务器请求。

    Mysql 的存储引擎,myisam和innodb的区别

    MyISAM 是非事务的存储引擎。  innodb是支持事务的存储引擎。    innodb的引擎比较适合于插入和更新操作比较多的应用  而MyISAM 则适合用于频繁查询的应用    MyISAM –表锁。  innodb–设计合理的话是行锁。...

    MYSQL基础知识——逻辑结构、并发控制、事务、多版本控制和存储引擎

    本篇文章会简单对MYSQL的逻辑结构、并发控制、事务、多版本控制和存储引擎等知识点进行梳理。 1 MYSQL逻辑结构  MYSQL逻辑结构如图所示,最上层服务主要包括连接管理、授权认证等;第二层服务是整个MYSQL的核心层...

    mysql8中文参考手册

    mysql数据字典、替代存储引擎,分布。mysql性能模式。连接器和api,sql模式指标 状态变量指标。系统变量指标。事务的隔离级别质数 Mysql词汇,如何使用MySQL的MySQL客户端程序来创建和使用一个简单的数据库。 备份你...

    MySQL 5.1中文手冊

    14. 插件式存储引擎体系结构 14.1. 前言 14.2. 概述 14.3. 公共MySQL数据库服务器层 14.4. 选择存储引擎 14.5. 将存储引擎指定给表 14.6. 存储引擎和事务 14.7. 插入存储引擎 14.8. 拔出存储引擎 14.9. 插件式存储器...

    MySql数据库操作:创建数据库、删除数据库和数据库存储引擎

    声明:本文内容参考书籍《MySql入门很简单》 ...同时MySql中提到了存储引擎的概念。简而言之,存储引擎就是指表的类型。数据库的存储引擎决定了表在计算机中的存储方式。 1 创建数据库 创建数据库用到的SQL语句为 CRE

    Mysql基础.md

    Mysql 简单基础知识,包括缓存。语法词法解析,语义解析以及优化器,执行器,再介绍了Mysql 通信 与存储引擎,不同存储引擎之间的特点以及Mysql 执行流程。

    MySQL 5.1参考手册

    14. 插件式存储引擎体系结构 14.1. 前言 14.2. 概述 14.3. 公共MySQL数据库服务器层 14.4. 选择存储引擎 14.5. 将存储引擎指定给表 14.6. 存储引擎和事务 14.7. 插入存储引擎 14.8. 拔出存储引擎 14.9. 插件式存储器...

    大厂2022mysql面试题汇总

    第三层是存储引擎层,存储引擎负责 MySQL 中数据的存储和提取。服务器通过 API 与存储引擎通信,这些接⼝屏蔽了不同存储引擎的差异,使得差异对上层查询过程透明。除了会解析外键定义的 InnoDB 外,存储引擎不会解析...

    MySQL5.1性能调优与架构设计.mobi

    第3章 MySQL存储引擎简介 3.0 引言 3.1 MySQL存储引擎概述 3.2 MyISAM存储引擎简介 3.3 InnoDB存储引擎简介 3.4 NDB Cluster存储引擎简介 3.5 其他存储引擎介绍 3.6 小结 第4章 MySQL安全管理 4.0 引言 ...

Global site tag (gtag.js) - Google Analytics