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引擎的理解相关推荐

  1. MySQL存储引擎深入理解

    文章目录 看完本篇文章你能学到什么? MySQL存储引擎深入理解 一.什么是MySQL存储引擎 1.1 存储引擎概述 1.2 查看存储引擎 1.3 修改默认存储引擎 1.4 常见存储引擎 二. 存储引 ...

  2. MySQL · 引擎分析 · InnoDB行锁分析

    前言 理解InnoDB行锁,分析一条SQL语句会加什么样的行锁,会锁住哪些数据范围对业务SQL设计和分析线上死锁问题都会有很大帮助.对于InnoDB的行锁,已经有多篇月报进行了介绍,这里笔者借鉴前面月 ...

  3. MySQL · 引擎特性 · InnoDB 崩溃恢复过程

    在前面两期月报中,我们详细介绍了 InnoDB redo log 和 undo log 的相关知识,本文将介绍 InnoDB 在崩溃恢复时的主要流程. 本文代码分析基于 MySQL 5.7.7-RC ...

  4. MySQL · 引擎特性 · InnoDB 事务子系统介绍

    前言 在前面几期关于InnoDB Redo和Undo实现的铺垫后,本节我们从上层的角度来阐述InnoDB的事务子系统是如何实现的,涉及的内容包括:InnoDB的事务相关模块,如何实现MVCC及ACID ...

  5. 面试 - 要不简单聊一下你对MySQL索引的理解?

    转载自  面试 - 要不简单聊一下你对MySQL索引的理解? MySQL索引?这玩意儿还能简单聊?明显是在挖坑,幸好老夫早有准备,切听我一一道来. 一.索引是什么? 索引是帮助MySQL高效获取数据的 ...

  6. MySQL · 引擎特性 · InnoDB 事务系统

    MySQL · 引擎特性 · InnoDB 事务系统 前言 关系型数据库的事务机制因其有原子性,一致性等优秀特性深受开发者喜爱,类似的思想已经被应用到很多其他系统上,例如文件系统等.本文主要介绍Inn ...

  7. MySQL索引的理解学习,面试不问索引原理就是事务原理

    目录 MySQL执行SQL的整体流程 引言, MySQL索引底层学习原因 磁盘介绍(理解磁盘IO) 索引底层数据结构B+树 B+树(聚集索引) B+树(辅助索引) 思考一下为何使用B+树结构, 不是B ...

  8. MySQL(二):MySQL的介绍+事务+分类+MySQL引擎

    文章目录 一.概念介绍 二.数据库的事物 三.数据库的分类 1.关系型数据库 2.非关系型数据库 四.常见的Mysql引擎 一.概念介绍 数据库是一个存储数据的仓库,按照数据结构,来组织,管理和存储数 ...

  9. MySQL引擎特性GIS-R-TREE

    MySQL引擎特性GIS-R-TREE Geohash用于代表位置的经纬度编码成一个字符串,支持WGS 84 Coordinate System MySQL支持的空间数据类型包括GEOMETRY,PO ...

最新文章

  1. usaco ★Bessie Come Home 回家
  2. NumPy 数组对象
  3. 如歌将两个数组合并_腾讯50题---合并两个有序数组
  4. 结对编程:黄金点小游戏
  5. VTK:Utilities之FilenameFunctions
  6. [每日一题] 11gOCP 1z0-052 :2013-09-23 Oracle11g 内存参数设置...................................C7...
  7. img、列表和table标签
  8. flash百叶窗消失_Flash遮罩特效实例之百叶窗效果
  9. c++卡常技巧-164
  10. Excel如何制作斜线表头
  11. 设置树莓派屏幕常亮,禁止树莓派屏幕休眠
  12. A micro Lie theory for state estimation in robotics002
  13. 百家号同步公众号的自媒体工具有吗?
  14. 数据仓库系列(3):数据的价值如何体现
  15. python3实现批量修改图片名称
  16. win32中SetCapture 和 ReleaseCapture的使用
  17. VoLTE的基本介绍
  18. php 取消warning,php怎么关闭warning提示
  19. 微信小程序滑块验证方法
  20. win7 64 sp1 vs2015 vs2017 ie10 ie11安装之旅

热门文章

  1. Kryo的基本简单使用
  2. libusb常用函数说明
  3. 用ironic安装openstack的原理
  4. rand和srand的用法(转载)
  5. 消息认证码和单向散列函数
  6. 程序人生—我已经努力了七年
  7. java摇号_以JAVA为平台实现摇号抽奖
  8. Cython的学习方法
  9. 生成二进制反射格雷码
  10. 数据库(笔记)——三个世界与数据模型