简单了解mysql InnoDB MyISAM相关区别
前言
mysql支持很多表类型的表(即存储引擎),如myisam、innodb、memory、archive、example等。每种存储引擎都有自己的优点和缺点,充分的理解每种存储引擎,有助于合理的使用它们。有人认为在同一个数据库中使用多种存储引擎很影响性能,其实这是一种十分错误的想法。实际上,除非是非常简单的数据库,否则的话,只使用一种存储引擎,对应用程序的性能来说是一个十分糟糕的行为。对数据库了解的人会根据每张表的作用不同来选择适当的存储引擎,这才是正确的做法。
前面说过mysql的存储引擎很多,但是我个人在工作中运用最多的存储引擎有两个,一个是InnoDB,一个是MyISAM。我这里就聊聊这两个存储引擎,并比较下两者之间的区别。
一、MyISAM
MyISAM现在为mysql的默认存储引擎,如果在建表的时候,没有指定表类型,mysql就会默认使用MyISAM。MyISAM有一个很多人认为很重要,然而我却觉得没什么卵用的特性,那就是MyISAM表示独立于操作系统之外的。通俗点说就是你可以很轻松的将MyISAM表从windows移植到linux或者从linux移植到windows。这确实是个优点,可是哪个技术主管会有在决定用了一种操作系统一段时间后又要换服务器的操作系统的脑残行为,所有我认为这个优点没有什么实际的意义。
MyISAM存储引擎是mysql组件中非常重要的一部分,在mysql中可以创建3种MyISAM格式的表——静态、动态和压缩。格式不需要单独指定,mysql会根据表结构自动选择最合适的格式。
1、MyISAM静态
如果表的每个字段的数据类型的定义都是使用静态的(如char),mysql就会自动使用静态MyISAM格式,这种类型格式的表的性能是很高的,也就是查询更新用的时间很少,但要知道这是在牺牲空间为代价。因为每一列都要分配最大的空间,即使有部分空间没有用到,这就使得静态的表所占的空间会比较大。
2、MyISAM动态
如果表的每个字段的数据类型的定义都是使用动态的(如varchar),mysql就会自动使用动态MyISAM格式,这种类型格式的表的性能会有所下降,但是它的空间占有要比静态的少很多。
3、MyISAM压缩
如果有一张表在设计之初只赋予了它读的使命,就可以用MyISAM压缩表,在相同的配置下,它的性能是最快的。
二、InnoDB
InnoDB是一个事务型存储引擎,它默认支持事务。因此,在对数据完整度有较高要求的项目中,都是采用InnoDB作为存储引擎,比如跟银行相关的项目。InnoDB还引入行级锁定。其他表类型都是全表锁定,意思就是说,在一个用户要修改一张表中,自己那一行的某个信息的时候,数据库会先锁定整张表,其他用户对这张表无法进行操作,这就是全表锁定。行级锁定就不一样了,只锁定自己要修改的那一行的,也就是说其他人对表还可以进行操作,只是不能操作被锁定的那一行的数据了。好处显而易见,在速度上更快了,特别适合处理多重并发的更新请求。
InnoDB还引入了外键约束。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
相关推荐
-
浅谈MySQL存储引擎选择 InnoDB与MyISAM的优缺点分析
下面先让我们回答一些问题: ◆你的数据库有外键吗? ◆你需要事务支持吗? ◆你需要全文索引吗? ◆你经常使用什么样的查询模式? ◆你的数据有多大? 思考上面这些问题可以让你找到合适的方向,但那并不是绝对的.如果你需要事务处理或是外键,那么InnoDB 可能是比较好的方式.如果你需要全文索引,那么通常来说 MyISAM是好的选择,因为这是系统内建的,然而,我们其实并不会经常地去测试两百万行记录.所以,就算是慢一点,我们可以通过使用Sphinx从InnoDB中获得全文索引. 数据的大小,是一个影响你
-
mysql更改引擎(InnoDB,MyISAM)的方法
本文实例讲述了mysql更改引擎(InnoDB,MyISAM)的方法,分享给大家供大家参考.具体实现方法如下: mysql默认的数据库引擎是MyISAM,不支持事务和外键,也可使用支持事务和外键的InnoDB. 查看当前数据库的所支持的数据库引擎以及默认数据库引擎 数据库支持的引擎和默认数据库引擎代码: 复制代码 代码如下: show engines; 更改方式1:修改配置文件my.ini 我将my-small.ini另存为my.ini,在[mysqld]最后添加为上default-storag
-
MySQL数据库修复方法(MyISAM/InnoDB)
在网上找了篇MySQL的技术文章,感觉不错,把它翻译过来共享下. 原文作者:Mike Peters 我整理了7条修复MySQL数据库的方法,当简单的重启对数据库不起作用,或者有表崩溃时. 简单的MySQL重启: /usr/local/mysql/bin/mysqladmin -uUSERNAME -pPASSWORD shutdown /usr/local/mysql/bin/mysqld_safe & 1.MyISAM表崩溃 MySQL数据库允许不同的表使用不同的存
-
Mysql更换MyISAM存储引擎为Innodb的操作记录总结
一般情况下,mysql会默认提供多种存储引擎,可以通过下面的查看: 1)查看mysql是否安装了innodb插件. 通过下面的命令结果可知,已经安装了innodb插件. mysql> show plugins; +------------+--------+----------------+---------+---------+ | Name | Status | Type | Library | License | +------------+--------+---------------
-
MySQL存储引擎中的MyISAM和InnoDB区别详解
在使用MySQL的过程中对MyISAM和InnoDB这两个概念存在了些疑问,到底两者引擎有何分别一直是存在我心中的疑问.为了解开这个谜题,搜寻了网络,找到了如下信息: MyISAM是MySQL的默认数据库引擎(5.5版之前),由早期的ISAM(Indexed Sequential Access Method:有索引的顺序访问方法)所改良.虽然性能极佳,但却有一个缺点:不支持事务处理(transaction).不过,在这几年的发展下,MySQL也导入了InnoDB(另一种数据库引擎),以强化参考完
-
MySQL存储引擎MyISAM与InnoDB区别总结整理
1.MySQL默认存储引擎的变迁 在MySQL 5.1之前的版本中,默认的搜索引擎是MyISAM,从MySQL 5.5之后的版本中,默认的搜索引擎变更为InnoDB. 2.MyISAM与InnoDB存储引擎的主要特点 MyISAM存储引擎的特点是:表级锁.不支持事务和全文索引,适合一些CMS内容管理系统作为后台数据库使用,但是使用大并发.重负荷生产系统上,表锁结构的特性就显得力不从心: 以下是MySQL 5.7 MyISAM存储引擎的版本特性: InnoDB存储引擎的特点是:行级锁.事务安全(A
-
MySQL存储引擎MyISAM与InnoDB的9点区别
虽然MySQL里的存储引擎不只是MyISAM与InnoDB这两个,但常用的就是它俩了.可能有站长并未注意过MySQL的存储引擎,其实存储引擎也是数据库设计里的一大重要点,那么博客系统应该使用哪种存储引擎呢?下面我们分别来看两种存储引擎的区别. MySQL存储引擎MyISAM与InnoDB的区别 一.InnoDB支持事务,MyISAM不支持,这一点是非常之重要.事务是一种高级的处理方式,如在一些列增删改中只要哪个出错还可以回滚还原,而MyISAM就不可以了. 二.MyISAM适合查询以及插入为主的
-
简单了解mysql InnoDB MyISAM相关区别
前言 mysql支持很多表类型的表(即存储引擎),如myisam.innodb.memory.archive.example等.每种存储引擎都有自己的优点和缺点,充分的理解每种存储引擎,有助于合理的使用它们.有人认为在同一个数据库中使用多种存储引擎很影响性能,其实这是一种十分错误的想法.实际上,除非是非常简单的数据库,否则的话,只使用一种存储引擎,对应用程序的性能来说是一个十分糟糕的行为.对数据库了解的人会根据每张表的作用不同来选择适当的存储引擎,这才是正确的做法. 前面说过mysql的存储引擎
-
Mysql中MyISAM和InnoDB的区别及说明
目录 MyISAM和InnoDB的区别 1. 定义 2. 区别 3. 使用 MyISAM和InnoDB索引结构分析 存储引擎作用于什么对象 MyISAM和InnoDB对索引和数据的存储在磁盘上是如何体现的 MyISAM主键索引与辅助索引的结构 InnoDB主键索引与辅助索引的结构 InnoDB索引结构需要注意的点 总结 MyISAM和InnoDB的区别 1. 定义 InnoDB: InnoDB:MySQL默认的事务型引擎,也是最重要和使用最广泛的存储引擎. 它被设计成为大量的短期事务,短期事务大
-
简单了解 MySQL 中相关的锁
本文主要是带大家快速了解 InnoDB 中锁相关的知识 基础概念解析和RocketMQ详细的源码解析 http://xiazai.jb51.net/202105/yuanma/RocketMQ_jb51.rar 为什么需要加锁 首先,为什么要加锁?我想我不用多说了,想象接下来的场景你就能 GET 了. 你在商场的卫生间上厕所,此时你一定会做的操作是啥?锁门.如果不锁门,上厕所上着上着,啪一下门就被打开了,可能大概也许似乎貌似有那么一丁点的不太合适. 数据也是一样,在并发的场景下,如果不对数据加锁
-
MySQL InnoDB 锁的相关总结
1. Shared and Exclusive Locks shared lock (译:共享锁) exclusive lock (译:排它锁.独占锁) InnoDB实现了标准的行级锁,其中有两种类型的锁,共享锁(shared locks)和排他锁(exclusive locks). A shared (S) lock permits the transaction that holds the lock to read a row. An exclusive (X) lock permits
-
MySQL InnoDB ReplicaSet(副本集)简单介绍
01 InnoDB ReplicaSet(副本集)介绍 在MySQL8.0引入了InnoDB ReplicaSet,它提供了我们熟悉的复制特性,如果有mongodb副本集的概念,理解InnoDB ReplicaSet会比较容易. InnoDB ReplicaSet使用了下面的技术: 1.MySQL Shell,一个功能更强大的客户端 2.MySQL Router,一个轻量级别的中间件,可以类比MongoDB中的mongos的角色: 3.MySQL Server,也就是MySQL服务 InnoDB
-
MySQL InnoDB架构的相关总结
引言 作为一个后端程序员,我们几乎每天都要和数据库打交道,市面上的数据库有很多,比如:Mysql,Oracle,SqlServer等等,那么我们的写的程序是怎么和数据库连接起来的呢?那就是数据库驱动,不同的数据库对应了不同的数据库驱动.在我们连接数据库的时候,首先将数据库驱动进行注册,然后基于数据库地址,用户名,密码等信息与数据库建立连接.如果用maven来管理项目的话,一般会看到如下配置: <dependency> <groupId>mysql</groupId> &
-
MySQL从MyISAM转换成InnoDB错误与常用解决办法
原来自己用的是为了装的, 所以在设置database usage(如下图1)的时候按照discuz官方的建议,选的都是Non-Transactional Database Only(只支持MyISAM数据引擎的非事务数据库),用MyISAM数据库,还没涉及到需要InnoDB,因此打算直接不加载INNODB引擎.后来在做WordPress,一开始还不知道原来WordPress用的是InnoDB数据引擎,于是在原来的数据库里面就建了一个数据库,一开始也没发觉问题,安装,导入sql,都没问题,当时也没
-
MySQL数据库MyISAM存储引擎转为Innodb的方法
mysql数据库存储引擎为MyISAM的时候,在大访问量的情况下数据表有可能会出现被锁的情况,这就会导致用户连接网站时超时而返回502,此时就需要MySQL数据库MyISAM存储引擎转为Innodb.步骤如下: 1.导出CentOS数据库的表结构 复制代码 代码如下: mysqldump -d -uxxx -p centos > centos_table.sql 其中-d参数表示不导出数据,只导出表结构 2.替换centos_table.sql里的MyISAM为INNODB 复制代码 代码如下:
随机推荐
- python 文件和路径操作函数小结
- php使用ZipArchive提示Fatal error: Class ZipArchive not found in的解决方法
- python&MongoDB爬取图书馆借阅记录
- AJAX如何接收JSON数据示例介绍
- chrome下img加载对height()的影响示例探讨
- 通过Response.Flush()实现下载失败的解决方法
- Android自定义View中attrs.xml的实例详解
- Android之用PopupWindow实现弹出菜单的方法详解
- jquery插件corner实现圆角边框的方法
- 封80端口应对策略 Nginx反向代理For WIN2003超级傻瓜式配置
- python使用在线API查询IP对应的地理位置信息实例
- JavaScript入门教程(6) Window窗口对象
- jquery中对于批量deferred的处理方法
- 微信小程序 Flex布局详解
- 使用Spring AOP实现MySQL数据库读写分离案例分析(附demo)
- thinkphp查询,3.X 5.0方法(亲试可行)
- PHP parse_url 一个好用的函数
- SQL Server误区30日谈 第3天 即时文件初始化特性可以在SQL Server中开启和关闭
- KesionCMS V4.x部份最常用的标签清单
- 灵活使用console让js调试更简单的方法步骤