当前位置: 首页 > news >正文

MySql(28)InnoDB和MyISAM索引对比

文章目录

  • MyISAM索引原理
  • MyISAM 和 InnoDB对比
  • 优化逻辑
  • 索引的代价

MyISAM索引原理

MyISAM的索引文件仅保存数据记录的地址

主键索引和二级索引结构上没有任何区别,只是主键索引要求Key是唯一的,而二级索引Key可以重复。
在这里插入图片描述

MyISAM 和 InnoDB对比

MyISAM的索引方式都是"非聚簇"的,与InnoDB包含一个聚簇索引不同

  1. 在InnoDB存储引擎中,我们只需要根据主键值对 聚簇索引 进行一次查找就能找到对应记录,而在 MyISAM 中却需要一次 回表
    这就意味着 MyISAM 建立的索引全部都是 二级索引
  2. InnoDB的数据文件本身就是索引文件,MyISAM索引文件和数据文件是分离的,索引仅保存记录的地址。
  3. InnoDB的非聚簇索引data域存储相应记录 主键的值,而MyISAM索引记录的是地址。
  4. MyISAM的回表很快,以为拿着地址偏移量可以直接取到数据。而InnoDB使用主键回表。

优化逻辑

  1. 知道了InnoDB索引实现后,就很容易明白 为什么不建议使用过长的字段作为主键。因为所有二级索引都引用主键索引,过长的主键索引会令二级索引变的过大。
  2. 用非单调的字段作为主键在InnoDB中不是个好主意,在插入新记录时,数据为了维持 B+Tree的特性而频繁分裂调整,十分低效而自增字段作为主键是一个好的选择

索引的代价

  • 空间上的代价
    • 每建立一个索引都要建立一颗B+Tree,每个节点都是一个数据页,一个页默认会占用16kb的空间。
  • 时间上的代价
    • 对表中数据进行 增删改操作时,都需要去需改各个B+Tree索引。需要进行 记录位移页面分裂页面回收等操作来维持 B+Tree。
      页面回收`等操作来维持 B+Tree。

相关文章:

  • 【数据库系统概论】实验四 数据编辑及查询
  • windows 驱动与内核调试 学习
  • F450无人机组装与调试
  • Dubbo:@DubboService和@Service、@DubboReference和@Reference的区别和关系
  • Vue2:使用Vant UI实现网易云评论页上拉和下拉刷新
  • 公众号查题接口系统调用
  • 用servlet写一个hello word
  • myj的补作业计划HrbustOJ新生赛(struct+优先队列)
  • canal的入门与使用
  • 病毒营销增长策略:Facebook和 Airbnb的5个病毒传播方法
  • C++:特殊类设计
  • Spring如何记忆
  • 材料科学基础学习指导-吕宇鹏-名词和术语解释-第二章晶体缺陷
  • 线段树2----简单拓展
  • 【学姐面试宝典】前端基础篇Ⅳ(JavaScript)
  • CentOS7 安装JDK
  • Debian下无root权限使用Python访问Oracle
  • docker容器内的网络抓包
  • DOM的那些事
  • HTML-表单
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • Python代码面试必读 - Data Structures and Algorithms in Python
  • Redis字符串类型内部编码剖析
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 每天10道Java面试题,跟我走,offer有!
  • 前端路由实现-history
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 如何进阶一名有竞争力的程序员?
  • 如何利用MongoDB打造TOP榜小程序
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 实现菜单下拉伸展折叠效果demo
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 小程序01:wepy框架整合iview webapp UI
  • 如何通过报表单元格右键控制报表跳转到不同链接地址 ...
  • #NOIP 2014# day.1 T2 联合权值
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (C语言)fgets与fputs函数详解
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (Oracle)SQL优化技巧(一):分页查询
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (附源码)spring boot车辆管理系统 毕业设计 031034
  • (附源码)spring boot网络空间安全实验教学示范中心网站 毕业设计 111454
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (力扣题库)跳跃游戏II(c++)
  • (四) Graphivz 颜色选择
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (一)Java算法:二分查找
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .jks文件(JAVA KeyStore)
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET 4.0中的泛型协变和反变
  • .net framework profiles /.net framework 配置
  • .net 开发怎么实现前后端分离_前后端分离:分离式开发和一体式发布
  • .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?