iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >MySQL回表的性能伤害程度有多大
  • 734
分享到

MySQL回表的性能伤害程度有多大

2024-04-02 19:04:59 734人浏览 泡泡鱼
摘要

目录1 回表的性能消耗2 覆盖索引1 回表的性能消耗 无论单列索引 还是 联合索引,一个索引就对应一个独立的B+索引树,索引树节点仅包含: 索引里的字段值主键值 即使根据索引树按条件

1 回表的性能消耗

无论单列索引 还是 联合索引,一个索引就对应一个独立的B+索引树,索引树节点仅包含:

  • 索引里的字段值
  • 主键值

即使根据索引树按条件找到所需数据,也仅是索引里的几个字段的值和主键值,万一你搞个select *,那就还得其他字段,就需回表,根据主键到聚簇索引里找,聚簇索引的叶节点是数据页,找到数据页才能把一行数据所有字段值读出来。
所以类似

select * from table order by xx1,xx2,xx3

得从联合索引的索引树里按序取出所有数据,接着对每条数据都走一个主键的聚簇索引查找,性能不高。
有时Mysql执行引擎可能认为,你要是类似

select * from table order by xx1,xx2,xx3

相当于得把联合索引和聚簇索引,两个索引的所有数据都扫描一遍,那还不如不走联合索引,直接全表扫描得了,这样就只需扫描一个主键索引。

但若形如:

select * from table order by xx1,xx2,xx3 limit 10

那执行引擎就知道你先扫描联合索引的索引树,拿到10条数据,接着对10条数据在聚簇索引里查找10次即可,那就还是会走联合索引。

2 覆盖索引

覆盖索引不是一种索引,只是一种基于索引查询的方式,即针对类似

select xx1,xx2,xx3 from table order by xx1,xx2,xx3

仅需联合索引里的几个字段的值,那就只需扫描联合索引的索引树,无需回表找其它字段,这种查询方式就是覆盖索引。
所以当你使用联合索引时,注意是否可能会导致大量回表到聚簇索引,若回表聚簇索引的次数太多,可能就直接给你做成全表扫描而不走联合索引了。
尽可能还是在sql里指定你仅需要的字段,而不要暴力select *,最好直接走覆盖索引。
即使无可避免地要回表,你也尽可能用limitwhere限定一下回表的次数,就从联合索引里筛选少数数据,再回表,这样性能好一点。

到此这篇关于mysql回表的性能伤害程度有多大的文章就介绍到这了,更多相关MySQL回表的性能伤害内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

您可能感兴趣的文档:

--结束END--

本文标题: MySQL回表的性能伤害程度有多大

本文链接: https://www.lsjlt.com/news/140104.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQL回表的性能伤害程度有多大
    目录1 回表的性能消耗2 覆盖索引1 回表的性能消耗 无论单列索引 还是 联合索引,一个索引就对应一个独立的B+索引树,索引树节点仅包含: 索引里的字段值主键值 即使根据索引树按条件...
    99+
    2022-11-13
  • MySQL回表的性能消耗是多少
    这篇文章主要介绍“MySQL回表的性能消耗是多少”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“MySQL回表的性能消耗是多少”文章能帮助大家解决问题。1 回表的性能消耗无论单列索引 还是 联合索引,...
    99+
    2023-06-29
  • 详细聊聊Oracle表碎片对性能有多大的影响
    目录前言⛳️1.创建测试表1.1建立表空间1.2创建ASSM表空间1.3创建表及索引⛳️2.查看表统计信息⛳️3.空块占用空间⛳️4.查看执行计划⛳️5.删除大量数据⛳️6.再次查看...
    99+
    2022-11-13
  • 缓存对于Java和Laravel应用程序的性能有多大的影响?
    在现代应用程序开发中,缓存是一个非常重要的概念。缓存是指将一些常用的数据存储在内存中,以便快速访问。缓存可以极大地提高应用程序的性能,特别是对于Java和Laravel应用程序来说。在本文中,我们将探讨缓存对于Java和Laravel应用...
    99+
    2023-06-18
    laravel leetcode 缓存
  • 我们怎样才能获得比 MySQL SHOW COLUMNS 语句返回的更多有关现有表列的详细信息?
    如果我们想获取有关现有表的列的更多详细信息,那么我们需要使用 SHOW FULL COLUMNS 语句。考虑下面的示例,其中 SHOW FULL COLUMNS 语句已应用于“Employee”表,MySQL 返回结果集,其中包含一些关于表...
    99+
    2023-10-22
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作