MySQL存储引擎简介及MyISAM和InnoDB的区别

时间:2024-01-26 23:53:17 

MyISAM:默认的MySQL插件式存储引擎,它是在Web、数据仓储和其他应用环境下最常使用的存储引擎之一。注意,通过更改 STORAGE_ENGINE 配置变量,能够方便地更改MySQL服务器的默认存储引擎。
InnoDB:用于事务处理应用程序,具有众多特性,包括ACID事务支持。
BDB:可替代InnoDB的事务引擎,支持COMMIT、ROLLBACK和其他事务特性。
Memory:将所有数据保存在RAM中,在需要快速查找引用和其他类似数据的环境下,可提供极快的访问。
Merge:允许MySQL DBA或开发人员将一系列等同的MyISAM表以逻辑方式组合在一起,并作为1个对象引用它们。对于诸如数据仓储等VLDB环境十分适合。
Federated:能够将多个分离的MySQL服务器链接起来,从多个物理服务器创建一个逻辑数据库。十分适合于分布式环境或数据集市环境。
Archive:为大量很少引用的历史、归档、或安全审计信息的存储和检索提供了完美的解决方案。                        
Cluster/NDB:MySQL的簇式数据库引擎,尤其适合于具有高性能查找要求的应用程序,这类查找需求还要求具有最高的正常工作时间和可用性。
Other:其他存储引擎包括CSV(引用由逗号隔开的用作数据库表的文件),Blackhole(用于临时禁止对数据库的应用程序输入),以及Example引擎(可为快速创建定制的插件式存储引擎提供帮助)。


MySQL: MyISAM 和 InnoDB的区别

MySQL存储引擎简介及MyISAM和InnoDB的区别

InnoDB 和 MyISAM 是在使用MySQL最常用的两个表类型,各有优缺点,视具体应用而定。基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持已经外部键等高级数据库功能。

MyIASM 是 IASM表的新版本,有如下扩展:

二进制层次的可移植性。
NULL列索引。
对变长行比ISAM表有更少的碎片。
支持大文件。
更好的索引压缩。
更好的键吗统计分布。
更好和更快的auto_increment处理。

以下是一些细节和具体实现的差别:

1. InnoDB不支持 FULLTEXT 类型的索引 ( 目前只有MyISAM表支持,且只能用在 CHAR , VARCHAR , TEXT 类型的字段上 )
2. InnoDB中不保存表的具体行数,也就是说,执行 select count(*) from table 时,InnoDB要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。注意的是,当count(*)语句包含 where条件时,两种表的操作是一样的。
3. 对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引。
4. DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除。
5. LOAD TABLE FROM MASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键)的表不适用。

另外,InnoDB表的行锁也不是绝对的,如果在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,例如 update table set num=1 where name like '%wfc%'

任何一种表都不是万能的,只用恰当的针对业务类型来选择合适的表类型,才能最大的发挥MySQL的性能优势.

标签:MySQL,存储引擎
0
投稿

猜你喜欢

  • Pycharm学习教程(4) Python解释器的相关配置

    2023-12-01 10:11:32
  • python实现网站用户名密码自动登录功能

    2021-07-05 09:48:13
  • PHP中重启php-fpm的几种方法汇总

    2023-06-12 21:05:24
  • 分享一道笔试题[有n个直线最多可以把一个平面分成多少个部分]

    2024-04-25 13:09:11
  • 超长文章的智能分页-支持HTML

    2008-03-20 13:21:00
  • Docker创建Mysql容器的简单步骤

    2024-01-28 20:20:40
  • 教你一分钟在win10终端成功安装Pytorch的方法步骤

    2023-09-01 19:32:38
  • python DataFrame 修改列的顺序实例

    2023-07-21 12:55:40
  • Flask框架请求钩子与request请求对象用法实例分析

    2021-11-23 20:14:48
  • 更改Ubuntu默认python版本的两种方法python-> Anaconda

    2021-07-30 15:33:28
  • 解读Python中的frame是什么

    2023-09-26 08:25:50
  • python必备库Matplotlib画图神器

    2021-03-29 21:16:08
  • VS2019连接mysql8.0数据库的教程图文详解

    2024-01-13 12:54:26
  • css hack简易的“独享”与“交集”

    2008-08-31 20:17:00
  • 在django项目中,如何单独运行某个python文件

    2023-04-27 07:37:22
  • 深入浅析Python中join 和 split详解(推荐)

    2022-09-19 17:43:38
  • 详细讲解Access数据库远程连接的实用方法

    2008-11-28 16:34:00
  • vue 解决异步数据更新问题

    2024-04-30 10:45:28
  • jupyter读取错误格式文件的解决方案

    2022-04-02 18:56:57
  • Pyqt清空某一个QTreeewidgetItem下的所有分支方法

    2022-01-24 10:29:46
  • asp之家 网络编程 m.aspxhome.com