索引原理学习

(非原创,整理得)
数据库的数据都放在磁盘上,磁盘IO是非常消耗性能的;

磁盘预读

每一次IO读取的数据我们称之为一页(page),一般为4k或8k;
每次读取磁盘都是按页(page)的整数倍。

为什么b+树要求把真实的数据放到叶子节点而不是内层节点

IO次数取决于b+树的高度h

b+数一个节点大小为一个页,保证读取一个节点,只会进行一次IO操作

一次load一个磁盘块,磁盘块的大小是固定的,单个数据占空间越小,就意味着一个磁盘块能放的数量越多,这样一层树的数据(索引)就越多,一层能放更多的索引,树的高度就越低,磁盘IO次数越少

这就是为什么每个数据项,即索引字段要尽量的小,比如int占4字节,要比bigint8字节少一半

最左匹配特性

mysql索引引擎

  • MyISAM (非聚簇索引)
  • InnoDB (聚簇索引)
    聚簇索引:索引和数据文件为同一个文件。
    非聚簇索引:索引和数据文件分开的索引。

InnoDB要求表必须有主键,按主键的搜索十分高效,但是辅助索引搜索需要检索两遍索引:首先检索辅助索引获得数据记录主键,然后用主键到主索引中检索获得数据记录。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容