采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
这两种查询不都是全查询吗?为什么一个走索引,一个不走索引呢?其中id是主键,abz没有约束和索引。Innodb引擎
同学好,是否走索引主要由mysql执行机决定,它会分析,这里的话因为你第一个直接查的是主键,直接从索引载入(内存)比全表扫描(磁盘)要快,因此走的索引,而第二个因为要从索引定位到叶子节点的全部信息获取对应的非索引字段,因此不走索引
老师您好,请问这句“直接从索引载入(内存)”是否有些问题?MySQL的索引即B+树不是应该只有根节点是常驻内存中的嘛?要想查询主键,不是也在一层层的访问 非根节点的时候 会有磁盘的IO操作嘛?(记得老师之前讲过要让树矮一点,从而可以减少对磁盘中数据块的IO操作)
同学好,这里主要是想通俗地去做解释,毕竟索引涉及到了内存,而且即使之前不在内存,找数据的时候也会读入到内存里,通过索引快速进行定位
同学好,如果都是全表扫描,理论上不走索引比索引确实要快一些,同学可以尝试一下,全表扫描基本是不走索引的提交
为什么说全表扫描是都是从磁盘读取?相比主键索引速度上哪个快,分别是怎么载入内存的呢
由于索引扫描后要利用索引中的指针去逐一访问记录,假设每个记录都使用索引访问,则读取磁盘的次数是查询包含的记录数T,而如果表扫描则读取磁盘的次数是存储记录的块数B,如果T>B 的话索引就没有优势了。全表扫描虽然走得磁盘读取,但是是顺序读取,不像索引是随机读取
登录后可查看更多问答,登录/注册
招聘季即将到来,让百度资深面试官来为你的高薪Offer保驾护航
1.8k 27
2.7k 22
1.2k 15
1.4k 14
1.3k 14