Innodb索引
- 建立索引就是对数据进行排序,排序就是比较大小,B+树其实就是帮助我们排序的一种数据结构。PS mysql 8.0 才支持索引降序排序
- Where条件能否利用索引本质上就是看条件能不能和某个B+树索引进行比较大小。
- 最左前缀原则:本质上就是对由多个字段联合组成的复合字段进行大小比较,类似字符串比较大小,只有给定了最左侧的字段,才能去比较后续的字段。
- 全表扫描:在Innodb中,表中的所有主键索引都是在叶子节点中,所以全表扫描就是扫描主键索引的叶子节点。
- 覆盖索引:对于某个SQL在执行时,如果发现所要查询的数据在某一个索引上也存在时(除开主键索引),那么就可以直接利用这个索引就行查询获取数据,,不需要回表插寻,
- 索引条件:当某些条件因为不符合最左侧前缀原则,无法参与索引的执行时,在MySQL5.7之前,该条件会在索引数据回表后在Mysql Server层执行然后过滤数据,而在MySQL5.7之后,该条件会在执行索引后,回表前就执行过滤动作,相当于该条件的执行下沉了,也可叫索引条件下推。
- 在MySQL中,数字与字符串进行运算时,统一会将字符串转换为数字,非数字字符会统一转化为0.
思考
- 为什么说一个表超过2000多万条数据以上的表就是大表?
- 为什么使用MySQL的limit 分页时,页数越靠后执行越慢,怎么样优化?
- 在创建时索引时,需要考虑哪些因素,在选择字段时需要考虑哪些因素?
- 索引与MySQL的锁有关系么?
- 查询优化器是如何优化SQL和选择索引的?