博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql索引 回表_记录下mysql索引以及回表
阅读量:5742 次
发布时间:2019-06-18

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

mysql数据库的Innodb引擎所有的表都默认建立在索引之上的,也就是聚集索引,而主键就是聚集索引,所以主键只能建一个。普通索引也就是非聚集索引,可以多个。 索引的数据结构是B+树也就是平衡树。查找数据的时候根据索引查找数据所在位置然后取到数据。查找普通索引的时候是先根据普通索引找到主键再根据主键定位到数据,也就是数据是和主键一起存储的。

我们知道计算机磁盘IO是非常高昂的操作,所以优化后的磁盘IO是有预加载的,也就是读到哪条数据把附近的数据也一块读了,就是page。而B+树的结构,随便找了个图看看。从索引定位数据,最理想的是第一读加载page时就把索引全拿到内存里了,直接定位到数据这样就非常快了。然后实际情况不可能如此,但是你也可以想到尽量加载多的索引数据也挺好的,这也是为什么数据都放到叶子节点,与索引比数据太大了。这是从索引到拿到数据的一个简单点的描述。那普通索引是怎么工作的呐?首先查找方式是一样的,只不过普通索引找到的叶子有索引字段和聚集索引,在通过聚集索引找到叶子数据。多了一个过程而已。

1c5b9c63402a6932464acbcf0cebbbb5.png

f049bb7a7a270f96716422f9cc761028.png

回表是什么?通常数据量大的时候回表是灾难性的,比如说人员表里有学号、姓名、年龄等字段,学号是主键,姓名上也建了普通索引,你如果查询查询name字段,通过name索引就拿到了,而如果在加个age呐?你要在根据主键定位数据拿到age字段数据,这个过程就是回表。这时候就要考虑联合索引了。索引使用原则什么的就不说了,简单写写记录下遇到具体问题顺着这个思路查查。

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

你可能感兴趣的文章
我的友情链接
查看>>
跟着石头哥哥学cocos2d-x(一)---2dx环境搭建 (win7)
查看>>
c# 程序只能运行一次(多次运行只能打开同一个程序) 并激活第一个实例,使其获得焦点,并在最前端显示....
查看>>
认识Html
查看>>
Sql 学习随笔
查看>>
struts2结果类型
查看>>
WordPress插件开发: 文章同步到OSC博客插件(OscPress) (一)
查看>>
为office 2003光盘实现自动填写序列号的安装
查看>>
如何计算存储的iops
查看>>
ArrayList类示例1
查看>>
typecho在lighttpd下两种伪静态规则都可以用
查看>>
linux下防止syn***,端口扫描和死亡之ping
查看>>
设计模式实战序
查看>>
谈谈我对 可读_可扩展 等6个概念的理解
查看>>
Cocos2d-x 3.0 RichText富文本
查看>>
使用IO Analyzer测试ESXI的性能
查看>>
Discuz!NT由虚拟目录转换为应用程序(server2008)
查看>>
jquery.form附件上传的 $.handleError 、以及 $.httpData
查看>>
MDSTableClient类相关分析
查看>>
我的友情链接
查看>>