您好、欢迎来到现金彩票网!
当前位置:秒速飞艇计划专业版 > 索引 >

史上最牛分析MySQL索引机制的实现!不接受反驳

发布时间:2019-08-12 01:21 来源:未知 编辑:admin

  库是一个只要从事后端开发,就永远离不开的技术,大部分企业选择的数据库都是MySQL,所以需要我们对MySQL有着足够的了解。

  而MySQL索引,我们都知道提高性能要加索引,也知道索引的结构是B-Tree,也都可以说出几条加索引的原则,但再深入一点,往往就会词穷,这可能就是知其然而不知其所以然的结果了。这会让我们在实际的开发中,涉及到究竟要给哪个字段加索引,就“拄杖落手心茫然”了。

  于是我就问了自己这样几个问题,索引究竟是什么呢?索引是存在哪里的呢?MySQL是怎样通过索引,就优化了性能呢?

  首先想要了解索引究竟存在哪里,如何发挥作用,就不能只研究索引,要结合整个数据库的存储结构,运行流程,来分析索引是如何优化查询过程的。

  表空间(tablespace):可以默认为存储引擎逻辑结构的最高层,存放所有的数据。段(segment):包括数据段、索引段、回滚段,对于段的管理,由存储引擎自身完成。区(extent):1MB,一个区64个页,InnoDB一次从磁盘申请4~5个区,一个区中有连续的64个页。页(page)/块(block):每个页固定大小16KB。行(row):有Compact和Redundant两种行存储格式。

  如果没有任何索引优化,在查询数据时只能先遍历双向链表找到对应的页,加了索引,就可以通过索引的B+树结构定位对应的页。

  创建表后,member.ibd大小是112KB,可见有7个页,然后用《MySQL技术内幕-InnoDB存储引擎》中提到的python小工具,查看表空间中各个页的信息,其中有offset为3和4的两个数据页,此时还没有索引节点。

  通过Infimum Records可以找到主键为1的键值,就是绿框的部分,后面的值00 00 00 05就是数据页页号,再后面分别是主键为2和4对应的Pointer。

  InnoDB存储引擎中,表是索引组织表,所以准确来讲,聚集索引不是一种索引类型,而是一种InnoDB中数据的存储方式,在这种存储结构中,同时保存了索引和数据行。

  点击“提交”后,我们会向您的邮箱发送一封验证邮件,请按照邮件中的提示完成操作。

http://treyve-paysages.com/suoyin/542.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有