博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL聚集索引使用数字_Mysql聚集索引的使用
阅读量:6513 次
发布时间:2019-06-24

本文共 1133 字,大约阅读时间需要 3 分钟。

聚集索引

聚簇索引并不是一种单独的索引类型,而是一种数据存储方式(不是数据结构,而是存储结构),具体细节依赖于其实现方式,聚簇索引实际上是在同一个结构中保存了btree索引和数据行.

innodb将通过主键聚集数据,如果没有定义主键,Innodb会选择第一个非空的唯一索引代替,如果没有非空唯一索引,Innodb会隐式定义一个6字节的rowid主键来作为聚集索引

叶子页包含了行的全部数据,但是节点页只包含了索引列(或者可以说非叶子节点的节点页包含的是索引值的索引,因为这些节点页包含的值是从索引列中提取出来的)

因为聚集索引和表数据是放在一起的,所以一个表中只能有一个聚集索引

innodb和myisam物理存储的数据分布对比:

myisam:

是按照数据插入的顺序存储在磁盘上的,myisam中的主键索引和二级索引在结构上并没有什么不同,主键索引就是一个名为primary的唯一非空索引.

innodb:

因为innodb支持聚集索引,所以使用非常不同的方式存储同样的数据,innodb聚集索引包含了整个表的数据,而不是只有索引,因为在Innodb中,聚集索引就是表,所以不像myisam那样需要独立的行存储.聚集索引的每一个叶子节点都包含了主键值,事务ID,用于事务和MVCC的回滚指针以及所有剩余列的值,如果主键是一个列前缀索引,innodb也会包含完整的主键列和剩下的列的值。

还有一点和myisam不同的是,innodb的二级索引和聚集索引很不同,innodb二级索引的叶子节点中存储的不是行指针,而是主键值,并以此作为指向行的指针,这样的策略减少了当出现行移动或者数据页的分裂时二级索引的维护工作,使用主键值当做指针会让二级索引占用更多的空间,换来的好处是,innodb在移动行时无须更新二级索引中的这个指针.

20180616152856457026.png

聚集索引的好处:

数据访问更快,聚集索引将索引和数据保存在同一个btree中,因此从聚集索引中获取数据通常比在非聚集索引中查找要快(通过索引直接找到数据)

聚集索引的坏处:

聚簇数据最大限度地提高了IO密集型应用的性能,但如果数据全部放在内存中,则访问的顺序就没有那么重要了,聚集索引也就没有什么优势

插入数据操作成本比较大

二级索引可能比想象的更大,因为在二级索引的叶子节点包含了引用行的主键列

二级索引访问需要两次索引查找,而不是一次

因为二级索引叶子节点中保存的不是指向行的物理位置的指针,而是行的主键值.这意味着通过二级索引查找行,存储引擎需要找到二级索引的叶子节点获得对应的主键值

然后根据这个主键值去聚集索引中查找对应的行,这里做了重复的工作,两次btree查找而不是一次,对于innodb,自适应哈希索引能减少这样的重复工作.

转载地址:http://vtifo.baihongyu.com/

你可能感兴趣的文章
ECSHOP添加购物车加图片飞入效果
查看>>
谈谈SQL 语句的优化技术
查看>>
ecshop如何判断缓存文件是否能更新
查看>>
javascript于boolean类型转换,运营商&&和|| 返回值
查看>>
Socket tips: UDP Echo service - Client code
查看>>
深入分析面向对象中的封装作用
查看>>
深刻理解Python中的元类(metaclass)
查看>>
Java编程的逻辑 (44) - 剖析TreeSet
查看>>
address元素
查看>>
Android View体系(六)从源码解析Activity的构成
查看>>
详解ASP.NET Core Docker部署
查看>>
fnmatch源码阅读
查看>>
U9249 【模板】BSGS
查看>>
单片机小白学步系列(九) 用万用焊板搭建实验电路
查看>>
Tomcat PK Resin
查看>>
(转)全文检索技术学习(三)——Lucene支持中文分词
查看>>
Node.js+Koa开发微信公众号个人笔记(一)准备工作
查看>>
Android 图片缓存处理
查看>>
elasticsearch
查看>>
阿里盒马领域驱动设计实践
查看>>