Mysql回表与索引覆盖,联合索引问题
发布时间:2022-11-25 13:03:08 所属栏目:教程 来源:
导读: 一、Mysql为什么可以存储海量数据?
1.使用B+引擎,可以减少IO请求mysql数据表,使用的B+树,为N叉树,与普通的二叉树比较起来,高度跟低
2.查询效率稳定,每次都从根节点到叶子节点,叶子节点只
1.使用B+引擎,可以减少IO请求mysql数据表,使用的B+树,为N叉树,与普通的二叉树比较起来,高度跟低
2.查询效率稳定,每次都从根节点到叶子节点,叶子节点只
|
一、Mysql为什么可以存储海量数据? 1.使用B+引擎,可以减少IO请求mysql数据表,使用的B+树,为N叉树,与普通的二叉树比较起来,高度跟低 2.查询效率稳定,每次都从根节点到叶子节点,叶子节点只存储数据 3.叶子节点为双向循环链表,且按照关键字大小进行排列,可以有效的进行范围查询,hash索引在等值查询上效率高。 二、InnoDB与聚簇索引 聚簇索引:数据与索引存放在一起,找到了索引就找到了数据 InnoDB:底层由B+树实现,每个节点对应innodb的一个page,page的大小固定为16K,同一页可以有多条数据,也就是说访问数据时候,已经把页page加载到buffer中,直接在内存中查询,不必再访问磁盘。 优点: 1.使用经常更新的表,适合崇礼并发更新请求 2.支持事务 3.有binlog容灾日志 4.支持外键约束 5.支持行级锁 三、Myisam与非聚簇索引 非聚簇索引:索引与数据不存放在一起,需要先将索引缓存到内存中去在找数据 myisam:mysql的默认存储引擎,读操作效率高,写效率低。 优缺点: 1.不支持事务,外键 2.只有表级锁 3.写效率低下 四、回表与索引覆盖 辅助索引,主键索引B+ 回表:访问两次索引才能查询到数据【效率低下】 索引覆盖:表中的全部字段都是索引列的时候,会产生索引覆盖;解决回表问题,using index 【效率高】 例如: select id, name from table where name = 'xxxx'; 会先根据name的值,在name B+树上查找叶子节点 再去根据id获取id B+树上的所有数据 五、联合索引 1.当表中的全部字段都是索引列的时候,会产生索引覆盖。 2.通过索引就可以返回查询所需要的数据,这样避免了查到索引后再返回表操作,减少I/O提高效率。 3.此时,最左侧匹配原则可能会失败 覆盖索引失败原因: 1.select选择的字段中含有不在索引中的字段 ,即索引没有覆盖全部的列。 2.where条件中不能含有对索引进行like的操作。 (编辑:草根网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐

浙公网安备 33038102330554号