MySQL引擎的理解
MySQL引擎的理解
MySQL提供了多个不同的存储引擎,包括处理事务安全表的引擎和处理非事务安全表的引擎。在MySQL中,不需要在整个服务器中使用同一种引擎,应该针对具体的要求,对每一个表使用不同的存储引擎。MySQL 5.6支持的存储引擎有InnoDB、MyISAM、Memory、Merge、Archive、Federated、CSV、BLACKHOLE等。其中InnoDB是支持事务型的存储引擎,从MySQL 5.5之后,MySQL的默认事务引擎就是InnoDB了
MyISAM与InnoDB的区别
1、MyISAM:默认表类型,它是基于传统的ISAM类型,ISAM是Indexed Sequential Access Method (有索引的顺序访问方法) 的缩写,它是存储记录和文件的标准方法。不是事务安全的,而且不支持外键,如果执行大量的select,insert MyISAM比较适合。
2、InnoDB:支持事务安全的引擎,支持外键、行锁、事务是他的最大特点。如果有大量的update和insert,建议使用InnoDB,特别是针对多个并发和QPS较高的情况。
锁方面的区别
读锁和写锁
- 读锁:也称共享锁,即一个共享锁在执行时,另一个共享锁也可以执行,并不阻塞.
- 写锁:也称排他锁,当表加上了读锁或者写锁,需要等待它们释放才能加上新的写锁。
区别
- MyISAM默认用的是表级锁,不支持行级锁(不支持事务)
- 默认情况下 MyISAM的select加的是读锁,update,insert,delete增加的是写锁,由于select的锁为读锁,所以在一个select时可以别的select并不阻塞,但update,insert,delete时阻塞(给整个表加锁),这种操作可以模仿事物,但是消耗非常巨大
- InnoDB默认用的是行级锁,也支持表记锁(支持事务)
- InnoDB支持事物和行级锁,这是InnoDB最大的特色
- InnoDB使用的是二段锁,即加锁和解锁是分两个步骤完成的,即先对同一个事务里的一批操作分别进行加锁,然后到commit的时候,在对事务里加上的锁进行统一的解锁
- InnoDB存储引擎通过Record Lock算法解决了脏读问题,通过Next-Key Lock算法解决了不可重复读和幻读问题,从而实现了四种隔离级别。
脏读 | 不可重复读 | 幻读 | 丢失更新 | |
---|---|---|---|---|
READ UNCOMMITTED(读未提交) | Y | Y | Y | N |
READ COMMITTED(读已提交) | N | Y | Y | N |
REPEATABLE READ(默认 可重复读) | N | N | N | N |
SERIALIZABLE (序列化 最高级别) | N | N | N | N |
- Innodb的行锁模式有以下几种:共享锁,排他锁,意向共享锁(表锁),意向排他锁(表锁),间隙锁。
索引方面的区别
自动增长方面的区别
- myisam引擎的自动增长列必须是索引,如果是组合索引,自动增长可以不是第一列,他可以根据前面几列进行排序后递增。
- innodb引擎的自动增长列必须是索引,如果是组合索引也必须是组合索引的第一列。
主键区别
- myisam允许没有任何索引和主键的表存在,myisam的索引都是保存行的地址。
- innodb引擎如果没有设定主键或者非空唯一索引,就会自动生成一个6字节的主键(用户不可见),innodb的数据是主索引的一部分,附加索引保存的是主索引的值。
关于count()函数
- myisam保存有表的总行数,如果select count(*) from table;会直接取出出该值
- innodb没有保存表的总行数,如果使用select count(*) from table;就会遍历整个表,消耗相当大,但是在加了wehre条件后,myisam和innodb处理的方式都一样。
全文索引
- myisam支持 FULLTEXT类型的全文索引
- innodb不支持FULLTEXT类型的全文索引,但是innodb可以使用sphinx插件支持全文索引,并且效果更好。(sphinx 是一个开源软件,提供多种语言的API接口,可以优化mysql的各种查询)
delete from table
使用这条命令时,innodb不会从新建立表,而是一条一条的删除数据
索引保存位置
- myisam的索引以表名+.MYI文件分别保存。
- innodb的索引和数据一起保存在表空间里。
MySQL引擎的理解相关推荐
- MySQL存储引擎深入理解
文章目录 看完本篇文章你能学到什么? MySQL存储引擎深入理解 一.什么是MySQL存储引擎 1.1 存储引擎概述 1.2 查看存储引擎 1.3 修改默认存储引擎 1.4 常见存储引擎 二. 存储引 ...
- MySQL · 引擎分析 · InnoDB行锁分析
前言 理解InnoDB行锁,分析一条SQL语句会加什么样的行锁,会锁住哪些数据范围对业务SQL设计和分析线上死锁问题都会有很大帮助.对于InnoDB的行锁,已经有多篇月报进行了介绍,这里笔者借鉴前面月 ...
- MySQL · 引擎特性 · InnoDB 崩溃恢复过程
在前面两期月报中,我们详细介绍了 InnoDB redo log 和 undo log 的相关知识,本文将介绍 InnoDB 在崩溃恢复时的主要流程. 本文代码分析基于 MySQL 5.7.7-RC ...
- MySQL · 引擎特性 · InnoDB 事务子系统介绍
前言 在前面几期关于InnoDB Redo和Undo实现的铺垫后,本节我们从上层的角度来阐述InnoDB的事务子系统是如何实现的,涉及的内容包括:InnoDB的事务相关模块,如何实现MVCC及ACID ...
- 面试 - 要不简单聊一下你对MySQL索引的理解?
转载自 面试 - 要不简单聊一下你对MySQL索引的理解? MySQL索引?这玩意儿还能简单聊?明显是在挖坑,幸好老夫早有准备,切听我一一道来. 一.索引是什么? 索引是帮助MySQL高效获取数据的 ...
- MySQL · 引擎特性 · InnoDB 事务系统
MySQL · 引擎特性 · InnoDB 事务系统 前言 关系型数据库的事务机制因其有原子性,一致性等优秀特性深受开发者喜爱,类似的思想已经被应用到很多其他系统上,例如文件系统等.本文主要介绍Inn ...
- MySQL索引的理解学习,面试不问索引原理就是事务原理
目录 MySQL执行SQL的整体流程 引言, MySQL索引底层学习原因 磁盘介绍(理解磁盘IO) 索引底层数据结构B+树 B+树(聚集索引) B+树(辅助索引) 思考一下为何使用B+树结构, 不是B ...
- MySQL(二):MySQL的介绍+事务+分类+MySQL引擎
文章目录 一.概念介绍 二.数据库的事物 三.数据库的分类 1.关系型数据库 2.非关系型数据库 四.常见的Mysql引擎 一.概念介绍 数据库是一个存储数据的仓库,按照数据结构,来组织,管理和存储数 ...
- MySQL引擎特性GIS-R-TREE
MySQL引擎特性GIS-R-TREE Geohash用于代表位置的经纬度编码成一个字符串,支持WGS 84 Coordinate System MySQL支持的空间数据类型包括GEOMETRY,PO ...
最新文章
- usaco ★Bessie Come Home 回家
- NumPy 数组对象
- 如歌将两个数组合并_腾讯50题---合并两个有序数组
- 结对编程:黄金点小游戏
- VTK:Utilities之FilenameFunctions
- [每日一题] 11gOCP 1z0-052 :2013-09-23 Oracle11g 内存参数设置...................................C7...
- img、列表和table标签
- flash百叶窗消失_Flash遮罩特效实例之百叶窗效果
- c++卡常技巧-164
- Excel如何制作斜线表头
- 设置树莓派屏幕常亮,禁止树莓派屏幕休眠
- A micro Lie theory for state estimation in robotics002
- 百家号同步公众号的自媒体工具有吗?
- 数据仓库系列(3):数据的价值如何体现
- python3实现批量修改图片名称
- win32中SetCapture 和 ReleaseCapture的使用
- VoLTE的基本介绍
- php 取消warning,php怎么关闭warning提示
- 微信小程序滑块验证方法
- win7 64 sp1 vs2015 vs2017 ie10 ie11安装之旅