《逆袭进大厂》第十一弹之MySQL25问25答

论坛 期权论坛     
选择匿名的用户   2021-5-30 02:11   160   0
<div id="js_content">
<p>大家好,我是鸽秀。</p>
<p>嗯,鸽子的鸽...</p>
<img src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-b6c4c8c78d9527cb1d0b540ba1a39f51.png">
<figcaption>
  咕咕咕咕咕
</figcaption>
<p>《逆袭进大厂》系列貌似鸽很久了,都有粉丝跑来给我留言催更....</p>
<img src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-67ee83ee3daa1d9987f40787dbc3a84c.png">
<p>这段时间阿秀也是一直在忙自己毕业的事,研究生大论文搞得我脑壳都要大了,艾玛昨天好不容易写完提交外审了。</p>
<p>赶紧连夜整理好 MySQL 方面的笔记,然后发布出来...</p>
<p>在这段时间又有不少小伙伴专程跑过来加我微信,告诉我上岸的好消息,真的非常多...随便挑了两个。</p>
<p style="text-align: center"><img src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-ba9c0429ce152e240b5ad57b16a34a02.png"><img src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-82b0c24a2277f95e19a7096bb7c011d3.png"></p>
<p>一个是百度核心凤巢与字节,一个是阿里本地生活Offer!</p>
<p>真的很替他们高兴鸭!其实我的 PDF 只是起到归纳总结的作用,最重要的还是他们自己的努力 &#43; 坚持才收获到这些胜利果实的,希望看到这里的你也能吸吸欧气,早日上岸!<br></p>
<p>好了,开始我们今天的主题吧。</p>
<p>我的 MySQL 笔记全部整理完是 24,846 个字。本想一次性全部发完的,但考虑到以前我那令人诟病的排版,还是分为两期发布好了。第一期一共是是 12,474 字,剩下的下一期,也就是第十二弹再公开出来好了,来看看本期你会多少吧。</p>
<h4>1、为什么使用索引?</h4>
<ul><li><p>通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。</p></li><li><p>可以大大加快数据的检索速度,这也是创建索引的最主要的原因。</p></li><li><p>帮助服务器避免排序和临时表</p></li><li><p>将随机IO变为顺序IO。</p></li><li><p>可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。</p></li></ul>
<h4>2、Innodb为什么要用自增id作为主键?</h4>
<p>如果表使用自增主键,那么每次插入新的记录,记录就会顺序添加到当前索引节点的后续位置,当一页写满,就会自动开辟一个新的页。如果使用非自增主键(如果身份证号或学号等),由于每次插入主键的值近似于随机,因此每次新纪录都要被插到现有索引页得中间某个位置, 频繁的移动、分页操作造成了大量的碎片,得到了不够紧凑的索引结构,后续不得不通过OPTIMIZE TABLE(optimize table)来重建表并优化填充页面。</p>
<h4>3、MyISAM和InnoDB实现B树索引方式的区别是什么?</h4>
<ul><li><p>MyISAM,B&#43;Tree叶节点的data域存放的是数据记录的地址,在索引检索的时候,首先按照B&#43;Tree搜索算法搜索索引,如果指定的key存在,则取出其data域的值,然后以data域的值为地址读取相应的数据记录,这被称为“非聚簇索引”</p></li><li><p>InnoDB,其数据文件本身就是索引文件,相比MyISAM,索引文件和数据文件是分离的,其表数据文件本身就是按B&#43;Tree组织的一个索引结构,树的节点data域保存了完整的数据记录,这个索引的key是数据表的主键,因此InnoDB表数据文件本身就是主索引,这被称为“聚簇索引”或者聚集索引,而其余的索引都作为辅助索引,辅助索引的data域存储相应记录主键的值而不是地址,这也是和MyISAM不同的地方。</p><p>在根据主索引搜索时,直接找到key所在的节点即可取出数据;在根据辅助索引查找时,则需要先取出主键的值,再走一遍主索引。因此,在设计表的时候,不建议使用过长的字段为主键,也不建议使用非单调的字段作为主键,这样会造成主索引频繁分裂。</p></li></ul>
<h4>4、说一下MySQL是如何执行一条SQL的?具体步骤有哪些?</h4>
<img src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-143754156cb86effd13c48f6cdc0c22d.png">
<figcaption>
  SQL执行的全部过程
</figcaption>
<p>Server层按顺序执行sql的步骤为:</p>
<ol><li><p>客户端请求-&gt;</p></li><li><p>连接器(验证用户身份,给予权限) -&gt;</p></li><li><p>查询缓存(存在缓存则直接返回,不存在则执行后续操作)-&gt;</p></li><li><p>分析器(对SQL进行词法分析和语法分析操作) -&gt;</p></li><li><p>优化器(主要对执行的sql优化选择最优的执行方案方法) -&gt;</p></li><li><p>执行器(执行时会先看用户是否有执行权限
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP