采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
既然innodb辅助索引,要查找二次,那么我是不是认为myisam引擎查询速度要比innodb要快。至少在利用辅助索引来进行查找上面。
如果我的第一点想法没问题的话,那么innob为什么要这么来做,辅助索引的叶子节点为什么不直接存放物理数据的地址。这样不是更快吗?是什么样的原因让它必须这么来二次查找。
同学好,
1.对于innodb的覆盖索引,就不需要回表数据去查,覆盖索引可以参考 https://www.cnblogs.com/happyflyingpig/p/7662881.html,
其他情况下可能会比myisam稍慢。
2.
如果每个二级索引也都存储数据,那么数据得冗余好多份,得不偿失。
老师,你这里说的冗余多份,是指B+树的叶子节点都是储存的数据,而不是指向数据的指针吗
同学好,我看了一下,当时同学问说为什么不在辅助索引里面也存储数据的地址,其实数据的地址通常情况下会比主键索引占用的字节大没,地址一般由 文件号+块号+块内偏移组成,大概10个字节。 同时,当对一个innodb表进行大量DML后,B+树会分裂,同一行记录的页地址会发生变化。 由于辅助索引记录的是主键值,因此完全不用理会这个变化,如果辅助索引记录的是实际页地址,那DML一旦引起B+树分裂,还得与辅助索引进行同步。
谢谢老师,其实我对这个几种索引(尤其是覆盖索引)还有一些疑惑,老师有推荐的书籍或者博客吗。 还有一个问题,看到你后面讲的(在别人提的问题中)针对于innodb行级锁是对主键索引进行锁住的而非对数据进行加锁,那么针对于非聚集索引优化成覆盖索引减少回表操作时,是怎么进行行级锁的呢?或者这种情况下根本不能进行这样的优化? 我还在其他看到今年2月份老师回答别人问题说到互联网寒冬的情况是怎么样的呢:)
登录后可查看更多问答,登录/注册
招聘季即将到来,让百度资深面试官来为你的高薪Offer保驾护航
1.7k 27
2.7k 22
1.2k 15
1.4k 14
1.3k 14