文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

MySQL的存储引擎InnoDB和MyISAM

2024-04-02 19:55

关注

1. MyISAM底层存储

(非聚集索引方式)与InnoDB底层存储(聚集索引方式)

1.1 MyISAM底层存储(非聚集索引方式)

Myisam 创建表后生成的文件有三个:

底层存储方式:

图片讲解得很清楚,大家可以结合图片看一下:

1.2 InnoDB底层存储(聚集索引方式)

Innodb 创建表后生成的文件有两个:

底层存储方式:

图片讲解得很清楚,大家可以结合图片看一下:

2. InnoDB与MyISAM简介

Mysql 底层数据引擎以插件形式设计,最常见的是 Innodb 引擎和 Myisam 引擎,用户可以根据个人需求选择不同的引擎作为 Mysql 数据表的底层引擎。

ACID:

3. MyISAM与InnoDB的比较

 MyISAMInnoDB
存储结构Myisam 创建表后生成的文件有三个,分别为:
frm:创建表的语句
MYD:表里面的数据文件(myisam data)
MYI:表里面的索引文件(myisam index)
Innodb 创建表后生成的文件有两个,分别为:
frm:创建表的语句
idb:表里面的数据+索引文件
存储空间MyISAM支持支持三种不同的存储格式:静态表(默认,但是注意数据末尾不能有空格,会被去掉)、动态表、压缩表。当表在创建之后并导入数据之后,不会再进行修改操作,可以使用压缩表,极大的减少磁盘的空间占用。需要更多的内存和存储,它会在主内存中建立其专用的缓冲池用于高速缓冲数据和索引。
可移植性、备份及恢复数据是以文件的形式存储,所以在跨平台的数据转移中会很方便。在备份和恢复时可单独针对某个表进行操作;
MyISAM遇到错误,必须完整扫描后才能重建索引,或修正未写入硬盘的错误;
MyISAM的修复时间,与数据量的多少成正比。
在数据量很大的时候就相对痛苦;
InnoDB可借由事务记录档(Transaction Log)来恢复程序崩溃(crash),或非预期结束所造成的数据错误;
InnoDB的修复时间,大略都是固定的。
索引非聚集索引,MyISAM 是非聚集索引,数据文件是分离的,索引保存的是数据文件的指针。主键索引和辅助索引是独立的。聚集索引,聚集索引的文件存放在主键索引的叶子节点上,因此 InnoDB 必须要有主键,通过主键索引效率很高。但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据。因此,主键不应该过大,因为主键太大,其他索引也都会很大。
事务支持强调的是性能,每次查询具有原子性,其执行数度比InnoDB类型更快,但是不提供事务支持提供事务支持,外部键等高级数据库功能。 具有事务(commit)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)的事务安全(transaction-safe (ACID compliant))型表。
主键自增长可以和其他字段一起建立联合索引。引擎的自动增长列必须是索引,如果是组合索引,自动增长可以不是第一列,他可以根据前面几列进行排序后递增。InnoDB中必须包含只有该字段的索引。引擎的自动增长列必须是索引,如果是组合索引也必须是组合索引的第一列。
锁的粒度只支持表级锁,用户在操作myisam表时,select,update,delete,insert语句都会给表自动加锁,如果加锁以后的表满足insert并发的情况下,可以在表的尾部插入新的数据。支持行级锁。行锁大幅度提高了多用户并发操作的性能。但是InnoDB的行锁,只是在WHERE的主键是有效的,非主键的WHERE都会锁全表的。
全文索引支持 FULLTEXT类型的全文索引不支持FULLTEXT类型的全文索引,但是innodb可以使用sphinx插件支持全文索引,并且效果更好。
表主键允许没有任何索引和主键的表存在,索引都是保存行的地址。如果没有设定主键或者非空唯一索引,就会自动生成一个6字节的主键(用户不可见),数据是主索引的一部分,附加索引保存的是主索引的值。
存储表的具体行数保存有表的总行数,如果select count() from table;会直接取出出该值。没有保存表的总行数,如果使用select count(*) from table;就会遍历整个表,消耗相当大,但是在加了wehre条件后,myisam和innodb处理的方式都一样。
外键不支持支持,对一个包含外键的 InnoDB 表转为 MYISAM 会失败。

4. 存储引擎的使用

什么时候用MyISAM数据存储引擎?什么时候用InnoDB数据存储引擎?

《高性能MySQL》中写道:

总结:

到此这篇关于MySQL的存储引擎InnoDB和MyISAM的文章就介绍到这了,更多相关MySQL存储引擎内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯