mysql存储引擎的区别_Mysql的两种存储引擎以及区别

一、Mysql的两种存储引擎

1、MyISAM:

①不支持事务,但是整个操作是原子性的(事务具备四种特性:原子性、一致性、隔离性、持久性)

②不支持外键,支持表锁,每次所住的是整张表

MyISAM的表锁有读锁和写锁(两个锁都是表级别):

表共享读锁和表独占写锁。在对MyISAM表进行读操作时,不会阻塞其他用户对同一张表的读请求,但是会阻塞其他用户对表的写请求;对其进行写操作时会阻塞对同一表读操作和写操作

MyISAM存储引擎的读锁和写锁是互斥的,读写操作是串行的。那么,一个进程请求某个MyISAM表的读锁,同时另一个进程也请求同一表的写锁,MySQL如何处理呢?答案是写进程先获得锁。不仅如此,即使读请求先到锁等待队列,写请求后到,写锁也会插到读锁请求之前!这是因为MySQL认为写请求一般比读请求要重要。这也正是MyISAM表不太适合于有大量更新操作和查询操作应用的原因,因为,大量的更新操作会造成查询操作很难获得读锁,从而可能永远阻塞。这种情况有时可能会变得非常糟糕!

③一个MyISAM表有三个文件:索引文件,表结构文件,数据文件

④存储表的总行数,执行select count(*) from table时只要简单的读出保存好的行数即可

(myisam存储引擎的表,count(*)速度快的也仅仅是不带where条件的count。这个想想容易理解的,因为你带了where限制条件,原来所以中缓存的表总数能够直接返回用吗?不能用。这个查询引擎也是需要根据where条件去表中扫描数据,进行统计返回的。)

⑤采用非聚集索引,索引文件的数据域存储指向数据文件的指针。辅索引与主索引基本一致,但是辅索引不用保证唯一性。

⑥支持全文索引和空间索引

⑦对于AUTO_INCREMENT类型的字段,在MyISAM表中,可以和其他字段一起建立联合索引。

MyISAM的主索引图:索引文件的每个数据域存储指向数据文件的指针(每个索引指向了数据地址)

eaf23276a9b33463f803b9312e6508e0.png

MyISAM的辐索引:索引文件的每个数据域存储指向数据文件的指针(每个索引指向了数据地址),辐索引不用保证唯一性

0059ea9ff889532f52f59d9d56b9505b.png

2、Innodb:

①支持事务,支持事务的四种隔离级别;是一种具有事务(commit)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)的事务安全(transaction-safe (ACID compliant))型表。

②支持行锁和外键约束,因此可以支持写并发

③不存储总行数;也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行。注意的是,当count(*)语句包含 where条件时,两种表的操作是一样的。

④对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引

⑤DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除

⑥一个Innodb表存储在一个文件内(共享表空间,表大小不受操作系统的限制),也可能为多个(设置为独立表空间,表大小受操作系统限制,大小为2G),受操作系统文件大小的限制

⑦主键索引采用聚集索引(索引的数据域存储数据文件本身),辅索引的数据域存储主键的值;因此从辅索引查找数据,需要先通过辅索引找到主键值,再访问主键索引;最好使用自增主键,防止插入数据时,为维持B+树结构,文件的大调整。

Innodb的主索引图:(索引位置上存储的直接是数据本身)

3e61edd1b3aa8b0aa10781bed350921c.png

Innodb的辐索引图:

b06ab90b169bbdcb9ae2b4695a8842ca.png

总结大图:

86a3a1f129064f588a549a644dc635a4.png

参考:

https://www.cnblogs.com/wangdake-qq/p/7358322.html

https://blog.csdn.net/qq_35181209/article/details/78030110

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/434695.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

带给你灵感的3D街画艺术设计

3D街头艺术画已在16世纪以来意大利文艺复兴时期的Madonnari画家创造了令人惊叹的壁画来装饰豪华别墅的内墙。3D艺术也可以跟踪它的航线,。这里有一些新的图像,这将使你想知道它是如何可能的使东西是如此逼真,3D设计们不要错过 1。 &#xff0…

[vc]如何对radio按钮分组

如何使用多组?多组和一组是一样的使用,只要搞清楚哪个是哪一组的就行了。再为对话框添加Radio3和Radio4。很简单,先为这些RadioButton排个顺序,就是排列他们的TABORDER。在对话框资源面板上CtrlD,然后按你自己的理想顺…

[原]2011年度生活三层总结

一年了。 想到自己从开始没有目标,误打误撞的来到了提高班到现在的成长。我是多么的幸运,幸运的来到廊坊师范(现在都要称之为母校了),幸运的来到了提高班,遇到了米老师,在此感谢。 一年了。改变…

jdbc存储过程mysql_JDBC对MySQL数据库存储过程的调用

1、什么是存储过程存储过程(英文:Stored Procedure)是在大型数据库系统中,为了完成特定功能而编写的一组的SQL语句集。存储过程经编译存储在数据库中,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。2、与一般SQL语…

vi快捷键

u 撤销你刚才做的动作 ctrlr 恢复你刚才撤销的动作 复制粘贴 1. 将光标移动到将要复制的行处,按yy进行复制当前行(按nyy复制n行),再移动到粘贴位置,按p进行粘贴。 2. 将光标移到复制的…

【转】:andriod 开发环境工具下载地址(2)

http://www.cnblogs.com/oudi/archive/2011/06/30/2094674.htmlandriod 开发环境工具下载地址注意内容1. jdk:http://www.oracle.com/technetwork/java/javase/downloads/index.html2.eclipse:http://www.eclipse.org/downloads/ 3.andrioid sdk 下载地址:http://developer.and…

hp laser103 属性没有配置项_哦?在hp打印机面板上就可以更改打印机ip地址

修改打印机IP的方法有很多但都没有直接从打印机控制面板上修改方便过瘾虽然有些机器不支持但是惠普大部分机器还是可以的今天我们就以 LaserJet M227 系列打印机为例hp官方为大家介绍一下具体的设置方法步骤一:打印配置报告查看有效IP地址如果机器是2行控制面板 1.在…

vb连接odbc连接mysql数据库_vb6通过ODBC连接mysql数据库

在尝试连接数据库之前, 需要简单说明一下连接数据库的两种最常见的方式: 一种是通过建立 DSN 来连接, 这种比较麻烦, 程序移植性差; 我一般采取利用 ADODB 连接数据库的方式, 这种比较灵活方便, 不需额外工作, 方便程序移植.下面的例子就是通过 ADODB 连接 MySQL 数据库:首先, …

ABS_MT_TOUCH_MAJOR和ABS_MT_WIDTH_MAJOR

通常的多点触摸周期可以描述为:ABS_MT_*|SYN_MT_REPORT|ABS_MT_*|SYN_MT_REPORT|SYN_REPORT有些ABS_MT事件是必须实现的,如ABS_MT_POSITION_X和ABS_MT_POSITION_Y.而某些事件,如ABS_MT_TOUCH_MAJOR和ABS_MT_WIDTH_MAJOR是否需要实现则取决于具…

Java 笔记

1 词语 JRE —— Java运行时环境(Java Runtime Environment) JVM —— Java虚拟机 JDT —— Java的开发环境,可以方便的对代码进行开发及调试功能 SDK —— 软件开发工具包(Software Development Kit) IDE —— 集成开…

Windows修改注册表按键映射

Scancode Map 注册表项来实现键盘按键映射。 位于注册表的: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout\ 下新建一个二进制值项: "Scancode Map" 这个项目可实现对键盘按键的映射。这里映射的意思可理解为“替换”…

python去掉最高分和最低分_去掉一个最高分,去掉一个最低分求平均值(trimmean)...

如下图:演讲比赛,要求去掉一个最高分,去掉一个对低分后求平均值。当然这个太简单了,我们可以用max求出最大值,用min求出最小值,然后sum求出数据总和,用(总和-最大值-最小值)/(数据总个数-2)。思…

Android的.apk软件安装到sd卡的方法

对于Android 2.2开始的软件可以装到到SD上的支持,对于adb命令而言也有了改进,对于Android 2.2固件中的pm命令开支持安装选项参数,这里新增了参数setInstallLocation,这里我们可以用adb通过shell命令执行linux的pm添加一些参数即可…

[Oracle整理]CASE-END

说明:本内容是工作用到的知识点整理,来自工作中和网络。 代码于Oracle9上测试。 作用: 1可用来进行数据资料行转列的功能 2可用来对数据进行判断,类似decode,但CASE语句在处理范围条件的时候会显得非常灵活。如果只是需要匹配少量…

mysql声明declare_mysql8 参考手册--DECLARE ... CONDITION声明

DECLARE condition_name CONDITION FOR condition_valuecondition_value: {mysql_error_code| SQLSTATE [VALUE] sqlstate_value}该DECLARE ... CONDITION语句声明一个命名错误条件,将名称与需要特定处理的条件相关联。可以在后续DECLARE ... HANDLER语句中引用该名…

libevent源码深度剖析一

libevent源码深度剖析一 ——序幕 张亮 1 前言 Libevent是一个轻量级的开源高性能网络库,使用者众多,研究者更甚,相关文章也不少。写这一系列文章的用意在于,一则分享心得;二则对libevent代码和设计思想做系统的、更…

python什么是空类型_在Python中创建真正的空类型

创建您自己的自定义容器怎么样?在class Empty(object):def __init__(self, **kwargs):object.__setattr__(self, _obj, kwargs)def __getattribute__(self, name):obj object.__getattribute__(self, _obj)try:return obj[name]except KeyError:cls_name object._…

DMA及cache一致性的学习心得

这里提到的DMA设备是非PCI设备在framebuffer的prob函数中,用到了这样一个函数,下面分析下它的作用/* * s3c_fb_map_video_memory(): * 分配DRAM的缓存区给frame buffer。 * 这个缓存区是一个non-cached,non-buffered的。 &…

ASP.NET使用Memcached高缓存实例(初级教程)

http://www.itruanjian.com/a/itruanjian/datebase/nosql/2011/0927/5706.htmlMemcached是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的M…

C# 线程手册 第三章 使用线程 Monitor.TryEnter()

Monitor 类的TryEnter() 方法在尝试获取一个对象上的显式锁方面和 Enter() 方法类似。然而,它不像Enter()方法那样会阻塞执行。如果线程成功进入关键区域那么TryEnter()方法会返回true. TryEnter()方法的三个重载方法中的两个以一个timeout类型值作为参数&#xff0…