百度了一遍下来都在说myisam引擎的查询性能比innodb好,但是没有看到拿数据出来说话的,今天得空就做了下测试。

知识回顾

摘抄自:https://blog.csdn.net/STFPHP/article/details/52827845?utm_source=blogkpcl13

MyISAM索引的实现

MyISAM索引文件和数据文件是分离的,索引文件仅保存记录所在页的指针(物理位置),通过这些地址来读取页,进而读取被索引的行。下图是MyISAM的索引原理图:(为了简化,一个页内只存放了两条记录。)

上图所提供的示例表字段有Col1(ID)、Col2(age)、Col3(name)三个,其中Col1为Primary Key(主键),上图很好地说明了树中叶子保存的是对应行的物理位置。通过该值,存储引擎能顺利地进行回表查询,得到一行完整记录。同时,每个叶子页也保存了指向下一个叶子页的指针。从而方便叶子节点的范围遍历。

而对于二级索引,在 MyISAM存储引擎中以与上图同样的方式实现,这也说明了 MyISAM的索引方式是“非聚集的”,与 Innodb的“聚集索引”形成了对比。

InnoDB索引的实现

聚集索引

与 MyISAM相同的一点是,InnoDB 也采用 B+Tree这种数据结构来实现 B-Tree索引。而很大的区别在于,InnoDB 存储引擎采用“聚集索引”的数据存储方式实现B-Tree索引,所谓“聚集”,就是指数据行和相邻的键值紧凑地存储在一起,注意 InnoDB 只能聚集一个叶子页(16K)的记录(即聚集索引满足一定的范围的记录),因此包含相邻键值的记录可能会相距甚远。

在 InnoDB 中,表被称为 索引组织表(index organized table),InnoDB 按照主键构造一颗 B+Tree (如果没有主键,则会选择一个唯一的并且非空索引替代,如果没有这样的索引,InnoDB则会隐式地定义一个主键来作为聚集索引),同时叶子页中存放整张表的行记录数据,也可以将聚集索引的叶子节点称为数据页,非叶子页可以看做是叶子页的稀疏索引。

下图说明了 InnoDB聚集索引的实现方式,同时也体现了一张 innoDB表的结构,可以看到,InnoDB 中,主键索引和数据是一体的,没有分开。:

这种实现方式,给予了 InnoDB 按主键检索的超高性能。可以有目的性地选择聚集索引,比如一个邮件表,可以选择用户ID来聚集数据,这样只需要从磁盘读取较少并且连续的数据页就能获得某个id的用户全部的邮件,避免了读取分散页时所耗费的随机I/O。

辅助索引

而对于辅助索引,InnoDB采用的方式是在叶子页中保存主键值,通过这个主键值来回表(上图)查询到一条完整记录,因此按辅助索引检索实际上进行了二次查询,效率肯定是没有按照主键检索高的。下图是辅助索引的实现方式:

由于每个辅助索引都包含主键索引,因此,为了减小辅助索引所占空间,我们通常希望 InnoDB 表中的主键索引尽量定义得小一些(值得一提的是,MySIAM会使用前缀压缩技术使得索引变小,而InnoDB按照原数据格式进行存储。),并且希望InnoDB的主键是自增长的,因为如果主键并非自增长,插入时,由于写入时乱序的,会使得插入效率变低。

最后,我们要知道,B-Tree索引适用于等值匹配、范围匹配、键前缀匹配,这里的前缀指的是最左前缀。

测试

分别建立相同字段、索引列相同的俩长表,一个引擎是myisam, 一个是innodb

创建随机生成字符串和数字的函数,用于数据插入

3. 创建批量插入数据的函数

测试准备工作完成,开始

数据量在1w时,索引查询和非索引查询区别不大(红色箭头处为查询时间 单位秒)

数据量10W 索引查询区别不大, 非索引字段查询myisam要快些

数据量100w时 非索引字段查询myisam引擎的优势彰显出来了

数据量500w时 非索引字段查询myisam引擎的优势彰显出来了

索引查询俩个引擎差不多,但是非索引查询差别就很明显了,innodb耗时10s以上,而myisam只有0.6s

总结

MYIASM和INNODB查询使用索引时性能相差无几

但全表扫描时MYIASM查找的性能要好很多

标签:聚集,查询,索引,innode,InnoDB,myisam,mysql,主键

来源: https://blog.csdn.net/qq_35623773/article/details/114682703

mysql 查询效率测试,mysql innode和myisam引擎查询性能比较测试相关推荐

  1. (探讨)MyBatis中的N+1问题,多表关联查询效率高点还是多次单表查询效率高

    MySQL多表关联查询效率高点还是多次单表查询效率高,为什么? https://blog.csdn.net/weixin_33869377/article/details/86265527 MyBat ...

  2. 怎么提高mysql多表查询效率_MySQL创建index提高多表查询效率

    本文的目的在于探讨use index for join语句的基本原理.我们知道,在MySQL使用JION语句关联多表查询时,为表创建Index能够大幅度提高查询效率.下面以一个简单的例子来了解其中的原 ...

  3. MySQL多表关联查询效率高点还是多次单表查询效率高,为什么?

    这里写目录标题 MySQL多表关联查询对比多次单表查询,哪个效率高? 疑问: 高手解答: <阿里巴巴JAVA开发手册>里面写超过三张表禁止join 这是为什么?这样的话那sql要怎么写? ...

  4. 使用MySQL自带工具mysqlhotcopy快速备份MyISAM引擎的MySQL数据库

    2019独角兽企业重金招聘Python工程师标准>>> mysqlhotcopy是一个Perl脚本,最初由Tim Bunce编写并提供.它使用LOCK TABLES.FLUSH TA ...

  5. [转]详细讲解提高数据库查询效率的实用方法、外键关于性能

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...

  6. 【mysql 提高查询效率】​Mysql 数据库查询好慢问题解决

    mysql查询为什么会慢,关于这个问题,在实际开发经常会遇到.下面和大家一起聊聊如何解决这个问题. 遇到这种问题,我们一般也会想到是因为索引.看看是否没有建立索引,如果没有,相应应该建立索引. 如: ...

  7. 影响mysql导入效率的参数_extended-insert对mysqldump及导入性能的影响

    参数说明: -e, --extended-insert,长INSERT,多row在一起批量INSERT,提高导入效率,和没有开启 -e 的备份导入耗时至少相差3.4倍,默认开启:用--extended ...

  8. 关于解决MYSQL的like模糊查询效率的一种方案

    大家都知道like %suibin% 这种查询的效率极低,而MYSQL也建议不要这样模糊查询,常用的是把数据同步到CACHE里: 1.比如同步到ES里用ES模糊查询.或者同步数据到MongoDB实现模 ...

  9. mysql性能测试工具msyqlslap_mysqlslap工具测试mysql DB的性能

    mysqlslap的一个主要工作场景就是对数据库服务器做基准测试. 测试方法 1.测试工具:mysqlslap,mysqlslap是MySQL5.1.4之后自带的benchmark基准测试工具,该工具 ...

最新文章

  1. python 内置方法赋值_Python内置函数
  2. android string.xml前后加空格的技巧
  3. 快速上手RaphaelJS--RaphaelJS_Starter翻译(三)
  4. RabbitMQ direct交换机
  5. java提取字符从mysql_MySQL 字符串截取SUBSTRING()函数
  6. 揭晓阿里云神龙团队拿下TPCx-BB排名第一的背后技术
  7. 计算机怎样旋转桌面,win7电脑怎么设置翻转屏幕
  8. 数据不够,游戏来凑!随机三维人物实现可泛化的行人再辨识(ReID)
  9. Unity面试题精选(7)
  10. boost:regex分割字符串(带有'\'字符) - zzusimon的专栏 - 博客频道 - CSDN.NET
  11. .Net/C# 实现真正的只读的 Hashtable 类型的属性 (ReadOnly Hashtable Property)
  12. linux zen 补丁,Mageia 7.1 发布,修复AMD Zen 2支持
  13. wps文字表格制作拼音田字格模板_宝宝拼音汉字田字格doc模板下载
  14. 关于Lua的下载以及wlua、luac等文件的解释
  15. 01-解决Tomcat中文乱码问题
  16. 逻辑回归LR vs 支持向量机SVM
  17. 矩阵三角分解matlab,4矩阵三角分解法.ppt
  18. IRP结构体之Flag成员
  19. 从Flash到MP4,爱奇艺奇秀直播礼物特效精进之路
  20. 小程序毕业设计 基于微信汽车租赁租车小程序毕业设计开题报告功能参考

热门文章

  1. java宠物健康值_宠物健康微手册:成年篇
  2. python网络编程3-socketserver模块
  3. Python中jmespath解析提取json数据
  4. 计蒜客NOIP2017提高组模拟赛(四)day1
  5. Vue中计算属性与class,style绑定
  6. java并发编程(十七)内存操作总结
  7. 什么是JSONP以及它是怎么产生的
  8. windows中架设基于Apache的svn服务器
  9. vsphere client中部署OVF项目后为项目分配IP
  10. 云服务器Linux安装,配置,使用nginx