当前位置: 首页 > wzjs >正文

网站服务器哪里的好小红书关键词排名怎么做

网站服务器哪里的好,小红书关键词排名怎么做,怀化做网站,用rp怎么做网站导航菜单1. 什么是回表? 回表(Back to Table) 指的是 在使用非聚簇索引(辅助索引)查询时,MySQL 需要 先通过索引找到主键 ID,然后再回到主键索引(聚簇索引)查询完整数据&#xf…

1. 什么是回表?

回表(Back to Table) 指的是 在使用非聚簇索引(辅助索引)查询时,MySQL 需要 先通过索引找到主键 ID,然后再回到主键索引(聚簇索引)查询完整数据,这一过程称为回表。


2. 回表的示例

假设有一张 users 表:

CREATE TABLE users (id INT PRIMARY KEY,       -- 主键name VARCHAR(50),         -- 用户名age INT,                  -- 年龄address VARCHAR(255),      -- 地址INDEX idx_name (name)      -- 创建 name 的辅助索引
) ENGINE=InnoDB;

如果执行以下查询:

SELECT address FROM users WHERE name = 'Alice';

查询执行过程:

  1. 先查 idx_name 索引,找到 name='Alice' 对应的 id(假设 id = 3)。
  2. 再回表查询,根据 id=3 在聚簇索引(主键索引)中找到 address 字段。

为什么要回表? 因为 idx_name 只存了 nameid,但 address 不在索引中,必须再回到主键索引查找完整数据。


3. 什么情况下会发生回表?

  • 查询的字段不在索引覆盖范围内(即非覆盖索引查询)。
  • 使用二级索引(非主键索引)查询,而查询的字段不在索引列中。

4. 如何避免回表?

(1)使用覆盖索引

如果查询的字段已经包含在索引中,就可以避免回表

CREATE INDEX idx_name_age ON users(name, address);

然后执行:

SELECT address FROM users WHERE name = 'Alice';

此时,idx_name_age 索引已经包含 nameaddress,所以可以直接在索引中获取数据,不需要回表

(2)使用主键查询

如果使用 id(主键)查询,就不需要回表:

SELECT address FROM users WHERE id = 3;

因为 InnoDB 的主键索引(聚簇索引)本身就存储了完整数据,所以查询 id 不会回表。


5. 总结

查询方式是否回表原因
主键查询 (SELECT * FROM users WHERE id = 3)不会因为主键索引(聚簇索引)包含完整数据
非主键索引查询 (SELECT address FROM users WHERE name = ‘Alice’)会回表先查 name 索引,再回表查 address
覆盖索引查询 (SELECT name FROM users WHERE name = ‘Alice’)不会name 索引已经包含查询字段

🚀 结论: MySQL InnoDB 避免回表的方法

  1. 尽量使用覆盖索引(让查询的所有字段都包含在索引中)。
  2. 使用主键查询,避免使用非主键索引查询非索引字段。
  3. 分析 EXPLAIN 结果,关注 Extra 字段是否包含 "Using index"(表示使用了覆盖索引)。

这样可以减少回表,提高查询性能!🚀

6. 拓展:二级索引的叶子节点和非叶子节点存储内容**

6.1 二级索引 B+ 树结构示意

假设有如下 users 表:

CREATE TABLE users (id INT PRIMARY KEY,  -- 聚簇索引name VARCHAR(50),age INT,INDEX idx_age (age)   -- 二级索引
);

其中,表中的数据如下:

idnameage
1Alice25
2Bob30
3Charlie35

6.2 完整的二级索引 B+ 树结构
                (30)/    \(25)      (35)/      \     /    \(age=25,id=1) (age=30,id=2) (age=35,id=3)
6.3 📌 结构解析
  • 非叶子节点(索引键)
    • 只存储 索引列 age,用于 快速查找数据所在的叶子节点
    • 例如,30 代表左侧存 <30 的数据,右侧存 >=30 的数据。
  • 叶子节点(存储实际索引数据)
    • 存储 索引列 age主键 id,但 不存储完整数据
    • 例如,叶子节点 (age=30, id=2) 说明 age=30 的数据,主键 id=2
    • 叶子节点 通过主键 id 回表查询完整数据

6.4 二级索引查询流程

查询 SELECT * FROM users WHERE age = 30;

  1. 从非叶子节点找到 30 对应的叶子节点。
  2. 叶子节点存储 (age=30, id=2),返回 id=2。
  3. 回表:用 id=2 查询 users 表的主键索引,获取完整数据。

6.5 🔥 关键点总结
  1. 非叶子节点 只存索引 key(age),不存储数据
  2. 叶子节点age主键 ID,用于返回 ID 进行回表查询。
  3. 回表查询 是因为 二级索引不存完整数据,需要用主键 ID 进一步查询。
  4. 优化方式:
    • 覆盖索引(例如 INDEX idx_age_name (age, name)),让查询字段直接存入索引,避免回表。
    • 合理设计主键,避免主键过大影响二级索引的存储效率。

这样,你对二级索引的 存储结构和查询流程 是否更加清晰了呢? 😊🚀

http://www.dtcms.com/wzjs/500144.html

相关文章:

  • 九江网站建设九江鄂尔多斯seo
  • 莒县网站建设微信上如何投放广告
  • 交友网网站开发文档私人做网站建设
  • 内蒙古建设工程社会保障费退费网站推广工作的流程及内容
  • 湖州企业网站制作站长工具爱站网
  • 网站开发难学吗百度竞价怎么做效果好
  • 什么网站做企业邮箱服务长沙正规seo优化价格
  • 做业务员找数据的网站北京网站优化价格
  • 南京网站设公司seo外链优化培训
  • 深圳网站设计公司排名榜推广网站有效的方法
  • 网站管理 设置开启网站模板之家官网
  • 如何制作手机app软件下载北京seo推广优化
  • reactjs 做的网站网站制作公司排行榜
  • xps13适合网站开发吗百度热词搜索指数
  • 太原做网站的网络公司今日发生的重大新闻
  • 怎么做宇宙网站旅游最新资讯 新闻
  • 建立网站坐等访问者发现小程序seo
  • 电脑小游戏网站如何创建一个平台
  • 网站开发软件和工具ide和编辑器关键词查询神器
  • 做美食原创视频网站外链在线生成
  • 济南哪里有做网站的公司重庆seo扣费
  • 青海 网站开发 app gis免费网站流量
  • 做网站 怎么做留言如何做好平台推广
  • 专做奢侈品品牌的网站aso具体优化
  • 大庆百度做网站多少钱全网整合营销推广系统
  • 做招商加盟做得比较好的网站中国互联网协会官网
  • 网站开发流程丽江网络营销的四种模式
  • 遵义在线遵义晚报搜索引擎优化要考虑哪些方面?
  • 免费搭建个人业务网站自己怎么做网址开网站
  • 上海注册公司最新政策沈阳企业网站seo公司