MySQL调优学习笔记(二):索引组织表

目录

什么是索引组织表

什么是二级索引

 总结

参考资料:姜承尧的MySQL实战宝典

InnoDB存储引擎是MySQL数据库中使用最广泛的引擎,在海量大并发的 OLTP 业务中尤其适用。它在数据存储方面有一个非常大的特点:索引组织表(Index Organized Table)。

什么是索引组织表

数据存储有堆表和索引组织表两种方式。

堆表

堆表中的数据无序存放, 数据的排序完全依赖于索引。在堆表的组织结构中,数据和索引分开存储。索引是排序后的数据,而堆表中的数据是无序的,索引的叶子节点存放了数据在堆表中的地址。当堆表的数据发生改变,且位置发生了变更,所有索引中的地址都要更新,这非常影响性能,特别是对于OLTP业务。Oracle、Microsoft SQL Server、PostgreSQL 早期默认支持的数据存储都是堆表结构。


索引组织表

在索引组织表中,数据根据主键排序存放在索引中,数据即索引,索引即数据。主键索引也叫聚集索引。
MySQL中InnoDB存储引擎就是这样的数据组织方式,Oracle、Microsoft SQL Server后期也推出了支持索引组织表的存储方式。但是,PostgreSQL 数据库因为只支持堆表存储,不适合OLTP的访问特性,虽然它后期对堆表有一定的优化,但本质是通过空间换时间,对海量并发的OLTP业务支持依然存在局限性。

什么是二级索引

InnoDB 存储引擎中数据是根据主键索引排序存储的,除了主键索引外,其他的索引都称之为二级索引, 或非聚集索引。二级索引也是一颗 B+ 树索引,但它和主键索引不同的是叶子节点存放的是索引键值和主键值。

通过二级索引只能定位到主键值,需要额外再通过主键索引来查询其他数据。这种二级索引通过主键索引进行再一次查询的操作叫作“回表”。

索引组织表中二级索引设计有一个非常大的好处,若记录发生了修改,其他二级索引无须进行维护,除非记录的主键发生了修改。与堆表的索引实现对比,索引组织表在存在大量变更的场景下,性能优势会非常明显,因为大部分情况下都不需要维护其他二级索引。

由于每个二级索引都包含了主键值,查询数据时需要通过主键值进行回表,所以在设计表结构时主键值应尽可能紧凑,为的就是提升二级索引的性能。尽可能紧凑指的是一个页能存放的记录数尽可能多。

在实际业务场景中,开发同学很有可能会设计带有业务属性的主键,但请牢记以下两点设计原则:

  • 要比较顺序,对聚集索引性能友好;
  • 尽可能紧凑,对二级索引的性能和存储友好。

 总结

  • 索引组织表中主键索引即聚集索引,索引的叶子节点存放表中一整行完整记录;
  • 除主键索引外的索引都是二级索引,索引的叶子节点存放的是(索引键值,主键值);
  • 由于二级索引不存放完整记录,因此需要通过主键值再进行一次回表才能定位到完整数据;
  • 索引组织表对比堆表,在海量并发的OLTP业务中能有更好的性能表现。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
nside君的MySQL网络培训班课程特点: 业界最权威的MySQL数据库培训师姜承尧老师(也就是Inside君本人啦)亲授.姜承尧老师出版了《MySQL技术内幕:InnoDB存储引擎》、《MySQL内核:InnoDB存储引擎》等Mysql书籍。 课程紧密结合互联网公司实践,学员能够领略到BAT、网易等大公司的数据库架构与应用案例 课纲结合最新的MySQL 5.6、5.7版本,使得学员学到的都是最新的内容 充分掌握课程内容的学员年薪至少在25W起,第1期的学员已经证明了培训的价值 优秀学员可以获得姜老师的BAT等大型互联网公司的内推 面试技巧与简历模板(新增),帮助学员拿到更好的offer MySQL 安装与引擎 day001-MySQL 5.7介绍和安装 day002-MySQL 5.7安装多实例 day003-MySQL升级 参数 连接 权限 day004-MySQL权限拾 遗Role模拟 Workbench 体系结构 day005-slow_log generic_log audit 存储引擎一 day006-存储引擎 多实例安装上 day007-MySQL 多实例下 SSL MySQL 数据类型和SQL查询 开发 day008-MySQL 数据类型 day009-精通JSON类型 day010-Employees 临时的创建 外键约束 day011-SQL语法之SELECT day012-子查询 INSERT UPDATE DELETE REPLACE day013-作业讲解一 Rank 视图 UNION 触发器上 day014-触发器下 存储过程 自定义函数 MySQL 执行计划与优化器 day015-索引 B+树 上 day016-索引 B+树 下 Explain 1 day017-Explain 2 MySQL innodb引擎优化 day018-磁盘 day019-磁盘测试 day020-InnoDB_1 空间 General day021-InnoDB_2 SpaceID.PageNumber 压缩) day022-InnoDB_3 透明空间压缩 索引组织 day023-InnoDB_4 页(2) 行记录 day024-InnoDB_5 – heap_number Buffer Poo day025-InnoDB_6 Buffer Pool与压缩页 CheckPoint LSN day026-InnoDB_7 doublewrite ChangeBuffer AHI FNP MySQL 索引与innodb锁机制 day027-Secondary Index day028-join算法锁_1 day029-锁_2 day030-锁_3 day031-锁_4 day032-锁_5 day032-锁5标清 day033-锁_6 事物_1 day033-锁_6 事物1标清 day034-事物_2 MySQL 性能衡量 day035-redo_binlog_xa day036-undo_sysbench day036-undosysbench标清 day037-tpcc_mysqlslap MySQL 备份与恢复 day038-purge死锁举例_MySQL backup备份_1 day039-MySQL backup备份恢复_2 MySQL 复制技术与高可用 day040-MySQL 备份恢复backup_3_replication_1 day041-backup_4-replication_2 day042-replication_3 day043-replication_4-GTID 1 day044-replication_5-GTID 2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值