为什么MyISAM会比Innodb的查询速度快

INNODB在做SELECT的时候,要维护的东西比MYISAM引擎多很多:
1)数据块,INNODB要缓存,MYISAM只缓存索引块,  这中间还有换进换出的减少;

2)innodb寻址要映射到块,再到行,MYISAM记录的直接是文件的OFFSET,定位比INNODB要快

3)INNODB还需要维护MVCC一致;虽然你的场景没有,但他还是需要去检查和维护

MVCC (Multi-Version Concurrency Control)多版本并发控制

注释:

InnoDB:通过为每一行记录添加两个额外的隐藏的值来实现MVCC,这两个值一个记录这行数据何时被创建,另外一个记录这行数据何时过期(或者被删除)。但是InnoDB并不存储这些事件发生时的实际时间,相反它只存储这些事件发生时的系统版本号。这是一个随着事务的创建而不断增长的数字。每个事务在事务开始时会记录它自己的系统版本号。每个查询必须去检查每行数据的版本号与事务的版本号是否相同。让我们来看看当隔离级别是REPEATABLEREAD时这种策略是如何应用到特定的操作的:

  SELECT InnoDB必须每行数据来保证它符合两个条件:

  1、InnoDB必须找到一个行的版本,它至少要和事务的版本一样老(也即它的版本号不大于事务的版本号)。这保证了不管是事务开始之前,或者事务创建时,或者修改了这行数据的时候,这行数据是存在的。

  2、这行数据的删除版本必须是未定义的或者比事务版本要大。这可以保证在事务开始之前这行数据没有被删除

时间: 2024-10-30 08:14:29

为什么MyISAM会比Innodb的查询速度快的相关文章

ArrayList具有数组的查询速度快的优点以及增删速度慢的缺点

LinkedList接口(在代码的使用过程中和ArrayList没有什么区别) ArrayList底层是object数组,所以ArrayList具有数组的查询速度快的优点以及增删速度慢的缺点. 而在LinkedList的底层是一种双向循环链表.在此链表上每一个数据节点都由三部分组成:前指针(指向前面的节点的位置),数据,后指针(指向后面的节点的位置).最后一个节点的后指针指向第一个节点的前指针,形成一个循环. 双向循环链表的查询效率低但是增删效率高.所以LinkedList具有查询效率低但增删效

MySQL基于MyISAM引擎和InnoDB引擎性能测试对比

在MySQL中数据表,使用MyISAM引擎快一些,存储空间小一些:使用InnoDB引擎插入速度稍快,关键是能支持事务. 实际应用中使用MyISAM还是InnoDB好呢?得具体问题具体分析,由你的系统特性决定, 如使用MyISAM,得到性能提升,但将失去了对事务的支持,到底值不值呢,还得充分了解两种方式的优劣程度, 下面是我的一次测试结果: MyISAM 数据量 数据占空间(byte) 索引占空间(byte) 基于索引查询(s) 无索引查询(s) coun(*)查询(s) 插入100万记录(s)

MYSQL MYISAM引擎与INNODB引引擎的区别

MYISAM和INNODB是MYSQL数据库的两个主要引擎,MYISAM是MYSQL5.5版本之前的默认的引擎,而INNODB是MYSQL 5.5版本默认引擎. 两个引擎的区别如下: 事务处理 INNODB支持事务处理功能,事务具有以下4个属性,通常简称为事务的ACID属性. 原子性(Atomicity):事务是一个原子操作单元,其对数据的修改,要么全都执行,要么全都不执行. 一致性(Consisten):在事务开始和完成时,数据都必须保持一致状态.这意味着所有相关的数据规则都必须应用于事务的修

MySql的Myisam索引、Innodb索引 、count性能分析个人见解

在MySQL 5.6下做测试的. Myisam引擎: 当创建一个数据表时,mysql会生成3个文件,分别是(如表:test): test.frm.test.MYD.test.MYI文件, test.frm是表结构,test.MYD是存放数据的文件,test.MYI是存放索引的文件, 索引文件存储关系key-value,value是存储一个指向test.MYD中数据行的指针. 在这里就可以看出myisam引擎的数据与索引是分开存储的. 当使用索引搜寻数据时,mysql服务器会先到test.MYI文

Myisam索引和Innodb索引的区别

首先你要知道: 无论是Myisam和Innodb引擎,如果在建表的时候没有显示的定义一行主键列的话,他内部都会自动创建一个隐藏的主键索引: 主键索引以外的索引假设称为次索引:首先Myisam和Innodb两个都是默认采用的btree索引,可以脑补一颗二叉树: myisam引擎的数据在物理磁盘上是按照顺序存储的,而innodb引擎的表数据是随机分布的: myisam的主键索引的叶子节点只存放数据在物理磁盘上的指针,其他次索引也是一样的: innodb的主键索引的叶子节点下面直接存放数据,其他次索引

MySQL MyISAM 库转换为InnoDB的方法

1.备份数据库: mysqldump -u[user] -p[password] [databasename] > [dbfile.sql] # 备份数据库.2. /usr/local/mysql/bin/mysqladmin -u root -p shutdown # 停止数据库 或者 service mysql stop.3. InnoDB 表不支持全文搜索(fulltext search),那么,记得要将备份出来的数据库sql,删掉有关 Fulltext 的索引.4. cd /usr/lo

MySQL MyISAM引擎转换为InnoDB操作记录

进入mysql命令行模式: # mysql -uroot -ppwd 1.查看mysql提供什么存储引擎: mysql> show engines; 2.查看mysql当前提供的默认存储引擎: mysql> show variables like '%storage_engine%'; 3.显示数据库列表: mysql> show databases; 4.进入需要修改的数据库 mysql> use freeswitch; 5.列出FreeSWITCH库的所有表 mysql>

MyISAM引擎和InnoDB引擎的特点

随着MySQL的不断更新,MySQL常用的两大存储引擎的MyISAM和InnoDB也在不断的变化着,下面总结下这两大存储引擎的特点,朋友们可以根据业务需求,选择合适的存储引擎.^.^ MyISAM引擎的特点: 1.堆组织表: 2.不支持事务: 3.数据文件和索引文件分开存储: 4.支持全文索引: 5.主键索引和二级索引完全一样都是B+树的数据结构,只有是否唯一的区别(主键和唯一索引有唯一属性,其他普通索引没有唯一属性.B+树叶子节点存储的都是指向行记录的row pointer): 6.有特殊计数

HBase相对Hive查询速度快的对比

首先Hive的底层首先是MR,是属于批处理处理时间相对较长,不属于实时读写.在其架构上HBase和Hive有很大的区别. 架构介绍: Hive架构 –(1)用户接口主要有三个:CLI,Client 和 WUI.其中最常用的是CLI,Cli启动的时候,会同时启动一个Hive副本.Client是Hive的客户端,用户连接至HiveServer.在启动 Client模式的时候,需要指出Hive Server所在节点,并且在该节点启动Hive Server. WUI是通过浏览器访问Hive. –(2)H