前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MyISAM按照插入的顺序在磁盘上存储数据

MyISAM按照插入的顺序在磁盘上存储数据

原创
作者头像
用户7705674
修改2021-10-08 15:07:41
7690
修改2021-10-08 15:07:41
举报
文章被收录于专栏:css小迷妹css小迷妹

MyISAM按照插入的顺序在磁盘上存储数据

聚族索引的优点
  1. 可以把相关数据保存在一起。例如实现电子邮件时,可以根据用户ID来聚集数据,这样只需要从磁盘读取少数的数据页就能获取某个用户的全部邮件。如果没有使用聚族索引,则每封邮件都可能导致一次磁盘I/O;
  2. 数据访问更快。聚族索引将索引和数据保存在同一个B-Tree中,因此从聚族索引中获取数据通常比在非聚族索引中查找更快。

缺点:

  1. 二级索引叶子节点保存的不是指行的物理位置的指针,而是行的主键值。这意味着通过二级索引查找行,存储引擎需要找到二级索引的叶子节点获取对应的主键值,然后根据这个值去聚簇索引中查找到对应的行。这里做了重复的工作:两次B-TREE查找而不是一次。
  2. 插入速度严重依赖于插入顺序。按照主键的顺序插入是加载数据到InnoDB表中速度最快的方式。否则在插入新行时,可能需要大量的移动数据行和“页分裂”的问题。

为什么对主键加索引?

  1. 在innodb中,由于聚簇索引的顺序就是数据的物理存储顺序,因此我们要尽量使主键有序,方法就是使用COMB,前6个字节表示时间,可以精确到毫秒,后10个字节利用UUID的前10个字节。
  2. 由于主键需要唯一性,加了索引可以在插入新数据时快速确定唯一性,不用遍历数据库。

索引与加锁

InnoDB行锁是通过给索引上的索引项加锁来实现的,这一点MySQL与Oracle不同,后者是通过在数据块中对相应数据行加锁来实现的。InnoDB这种行锁实现特点意味着:只有通过索引条件检索数据,InnoDB才使用行级锁,否则,InnoDB将使用表锁! 索引对于InnoDB非常重要,因为它可以让查询锁更少的元组。 这点十分重要,InnoDB直到事务提交时才会解锁。如果查询不能使用索引,MySQL会进行全表扫描,并锁住每一个元组,不管是否真正需要。

Optimize Table

  是mysql中一个可以回收更多的空间、减少“碎片”(defragment)的命令。当表上的数据行被删除时,所占据的磁盘空间并没有立即被回收,使用了OPTIMIZE TABLE命令后这些空间将被回收,并且对磁盘上的数据行进行重排(注意:是磁盘上,而非数据库)。   多数时间并不需要运行OPTIMIZE TABLE,只需在批量删除数据行之后,或定期(每周一次或每月一次)进行一次数据表优化操作即可,只对那些特定的表运行。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 聚族索引的优点
  • 为什么对主键加索引?
  • 索引与加锁
  • Optimize Table
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档