MyISAM存储引擎

缺点:不支持事务,不支持外键。只支持表级锁。

优点:访问速度快,多用于select、insert语句的高负载操作。仅仅支持全文索引。

MyISAM缓存在内存的是索引,不是数据。而InnoDB缓存在内存的是数据,相对来说,服务器内存越大,InnoDB发挥的优势越大

Myisam的存储文件:

每个MyISAM在磁盘上存储程3个文件,文件名和表名是相同的,仅仅扩展名不一样:

  1、filename.frm:存储表定义

  2、filename.MYD:mydata,即存储的数据

  3、filename.MYI:myindex,即存储的索引

解说:数据文件和索引文件可以放在不同的目录下,需要在创建表的时候通过特定的语句DATA DIRECTORY和INDEX DIRECTORY来指定。

MyISAM类型的表可能会损坏影响访问,我们需要MyISAM类型的表提供的修复工具来修复,

  1、CHECK TABLE 语句来检测表的健康状态

  2、REPAIR TABLE语句来修复一个损坏的MyISAM表。

MyISAM类型的表支持的三种存储结构:

1、静态型

  静态表是默认的存储格式,静态表中的字段都是非变长字段,例如CHAR等长度不可变的数据类型。

  优点:存储速度快,表的性能比较高,容易缓存,出现故障容易恢复。

  缺点:占用的空间比较大,因为在定义的时候是固定的,所以不管列中的值有多大,都会以最大值为准,占据了整个空间。

  我们之前学过VARCHAR和CHAR的区别,在存取尾部带有空格字符的字符串的时候,我们取数据时VARCHAR取出来的字符串尾部带有空格(保留空格),而CHAR类型取出来的字符串尾部的空格字符则会被去掉。同样在这里也是,因为我们MyISAM的表在创建的时候如果是静态表存储格式,那么我们也要注意:如果需要保存的内容后面本来就带有空格,那么在返回的结果也会被去掉。

  还要注意的是:静态表中的数据在存储时是按照列的宽度定义补足空格,但是在应用访问的时候并不会得到这些空格,这些空格在返回前已经被去掉了。此外静态表是MyISAM存储引擎默认的存储格式。

2、动态型

  如果列(即使只有一列)定义为动态的数据类型,例如BLOB、TEXT、VARCHAR等变长数据类型。这时MyISAM就自动使用动态型表存储格式。

  优点:占用的空间相对较少。

  缺点:虽然动态型的表占用了比静态型表较少的空间,但带来了性能的降低,因为如果某个字段的内容发生改变则其位置很可能需要移动,这样就会导致碎片的产生。随着数据变化的怎多,碎片就会增加,数据访问性能就会相应的降低。

  对于因为碎片的原因而降低数据访问性,有两种解决方法:

    1、尽可能使用静态数据类型 

    2、定期执行OPTIMIZE TABLE语句或者myisamchk-r命令来改善性能。

3、压缩表

  压缩表有myisampack工具创建,占据非常小的磁盘空间。

InnoDB存储引擎

 优缺点

优点:支持事务,具有提交、回滚、崩溃恢复能力等。支持主键外键约束。支持并发量大,适用于大量的UPDATE、INSERT操作。

缺点:InnoDB写的处理效率差一点,并会占用更多的磁盘空间以保留数据和索引。不支持全文索引。大量的SELECT操作的查询速度不如MyISAM存储引擎。

InnoDB存储引擎的表的特点:

1、支持外键约束,详细参考之前的文章。

2、支持AUTO_INCREMENT,详细参考之前的文章。

存储方式

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

1、使用共享表空间存储

这种方式创建的表的表结构保存在.frm文件中。

共享表空间存储 多表空间存储

创建的表的表结构保存在.frm文件中。

表存放在innodb_data_home_dir和innodb_data_file_path定义的表空间中。

创建的表的表结构仍然保存在.frm文件中。但是每个表的数据和索引又单独保存在.ibd文件中。

对于分区表,也有对应的.ibd文件,详细查阅资料。

注意:要使用多表空间的存储方式,需要设置参数“innodb_file_per_tale”。(如下所示说明存储引擎使用了多表空间的存储方式。)。并且还要重新启动服务后才能生效。

疑问处理:

1、对于使用多表空间存储的参数对新建的表的什么时候才会生效问题。

  1、对于新建的表按照多表空间的方式创建,已有的表仍然使用共享表空间存储。

  2、如果将已有的多表空间方式修改回共享表空间的方式,则新建表会在共享表空间中创建,但是已有的多表空间的表仍然保存原来的访问方式。

  总结:多表空间的参数生效后,只对新建的表生效。

2、看了上面的理论知识,有人认为是否可以把.frm和.ibd的文件复制一下直接到别的数据库恢复一下呢?

  不可以的,至于原因我们可以参考深入浅出mysql的第140页来查看。我们大多数情况下是将单表恢复到目标数据库,还是需要mysqldump和mysqlimport命令来实现。

3、是否在多表空间的存储方式下,共享表空间就不需要了呢?

  不是的,即便在多表空间的存储方式下,共享表空间仍然是必须的。因为InnoDB要把内部数据词典和在线重做日志放在这个文件中。

MySQL的数据存放的目录下,在创建的数据库名字下有个.opt文件,有什么作用呢?

  答:在某些库目录下有个db.opt文件,那这个文件是干什么用的呢?如果你用记事本txt等编辑器打开看的话,内容很简单,是用来记录该库的默认字符集编码和字符集排序规则用的。也就是说如果你创建数据库指定默认字符集和排序规则,那么后续创建的表如果没有指定字符集和排序规则,那么该新建的表将采用db.opt文件中指定的属性

转载于:https://www.cnblogs.com/FengGeBlog/p/9845402.html

MySQL基础之 存储引擎相关推荐

  1. mysql基础之存储引擎

    mysql基础之存储引擎 原文:mysql基础之存储引擎 数据库对同样的数据,有着不同的存储方式和管理方式,在mysql中,称为存储引擎 常用的表的引擎 Myisam ,批量插入速度快, 不支持事务, ...

  2. MYSQL基础十一--存储引擎

    MYSQL可以将数据以不同的技术存储在文件(内存)中,这种技术就称为存储引擎. 每一种存储引擎使用不同的存储机制.索引技巧.锁定水平,最终提供广泛且不同的功能. 存储引擎: MyISAM InnoDB ...

  3. 数据库基础笔记(MySQL)7 —— 存储引擎和视图 ( 完结撒花 )

    存储引擎 实在是学浅才疏,只能大致写点,放篇大佬的,看详细的去吧 传送门 ,等我闲下来学会了再来补充 即一个表存储数据的方式,不同的存储引擎会提供不同的功能,性能等 可以用 engine 指定存储引擎 ...

  4. tablestore列式存储原理_10分钟搞透:技术人必会的MySQL体系结构与存储引擎!

    MySQL是目前使用最广的开源数据库,不管从装机量.使用人群.专职人员.社区发展,还是基于MySQL的其他分支,都是当之无愧的No.1. 本文将从以下4个方面,带你搞透MySQL体系结构与存储引擎. ...

  5. MySQL高级-(存储引擎、索引、锁)

    MySQL高级 一.MySQL存储引擎 1.MySQL体系结构 体系结构的概念 任何一套系统当中,每个部件都能起到一定的作用! MySQL的体系结构 体系结构详解 客户端连接 支持接口:支持的客户端连 ...

  6. Mysql使用大全(MySQL架构与存储引擎 、事务 、业务设计 、索引 、数据结构 、执行计划 、数值类型)

    这是一篇mysql大全,学习完这篇文章,相信在日常业务和面试完全不在问题,下面我们来一一介绍 MySQL架构与存储引擎 全局变量和会话变量 要想显式指定是否设置全局或会话变量,使用GLOBAL或SES ...

  7. MySQL高级篇——存储引擎和索引

     导航: [黑马Java笔记+踩坑汇总]JavaSE+JavaWeb+SSM+SpringBoot+瑞吉外卖+SpringCloud+黑马旅游+谷粒商城+学成在线+牛客面试题_java黑马笔记 目录 ...

  8. mysql 学习笔记--存储引擎、索引、sq优化

    全面的 mysql学习笔记–通用语法.函数.数据类型.约束.多表查询.事务 全面的 mysql学习笔记–存储引擎.索引.sql优化 全面的mysql学习笔记–视图/存储过程/触发器.锁.InnoDB引 ...

  9. mysql有那些存储引擎_MySQL有那哪些存储引擎

    实际我们在平时的开发中,经常会遇到的,在用SQLyog等工具创建表时,就有一个引擎项要你去选.如下图: Mysql的存储引擎有这么多种,实际我们在平时用的最多的莫过于InnoDB和MyISAM了. 所 ...

最新文章

  1. lombox的用法(省去了set/get/NoArgsConstructor/AllArgsConstructor)
  2. Hybrid Error Correction approach and DeNovo Assembly for MinIon Sequencing Long Reads
  3. 计算机应用基础全套ppt,计算机应用基础全套PPT电子教案(完整版).ppt
  4. redis解决“高并发定时秒杀”库存误差问题
  5. MAC地址表配置与绑定
  6. C#的变迁史06 - C# 4.0 之并行处理篇
  7. 正则表达式学习笔记001--点号匹配
  8. 【toplink】 位居第一的Java对象关系可持续性体系结构
  9. power query时间函数(思维导图)
  10. Python链家广州二手房的数据爬取--数据爬取
  11. 超级课程表显示服务器出错,不得不说,超级课程表正在流失大学生用户——一位超级课程表粉丝的自白...
  12. msp430单片机c语言开发,MSP430单片机开发总结
  13. 运营15年的飞扬军事论坛宣布停止运营 关闭服务器
  14. 前端性能优化方案(图片)
  15. A. 拼音魔法 大学生程序设计邀请赛(华东师范大学)
  16. 青龙面板+傻妞+JD(自用)
  17. 如何判断一个对象是否属于某个类
  18. 现在开发人员都开始做测试了,是不是以后就没有软件测试人员了?
  19. Windows安裝SourceTree
  20. 15款js编辑器大全 收藏

热门文章

  1. 对中国医学影像AI产品商业化的思考
  2. 我的业务要不要用人工智能?引入AI前你需要评估的(一)
  3. 微软研究院开源编程语言Verona,借鉴Rust、Cyclone等特性
  4. 多模人车交互,智能汽车的AI感知进化
  5. 微软开源可解释机器学习工具包lnterpretML
  6. 助力AI腾飞,深度学习走向何方?
  7. 科普丨一文看懂语音识别的技术原理
  8. 使用bash工具创建ssh key
  9. torch.unbind()
  10. 中文分词jieba的简单使用