谷歌SEO

谷歌SEO

Products

当前位置:首页 > 谷歌SEO >

MySQL为何索引下推失效?

96SEO 2026-08-08 01:17 0


一、基础环境与表结构信息

数据表结构

本次分析基于业务表 contract_company_info,主要表结构及索引如下:

MySQL为何索引下推失效?
CREATE TABLE IF NOT EXISTS `contract_company_info` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '分公司明细表主键',`delete_flag` smallint NOT NULL DEFAULT COMMENT '数据状态,0正常,1删除',`contract_code` varchar COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '合同编号'。`project_code` varchar COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '关联项目号',`update_time` timestamp NOT NULL DEFAULT current_timestamp ON UPDATE current_timestamp COMMENT '更新时间',PRIMARY KEY USING BTREE,-- 主要联合索引
KEY `idx_contract_company` USING BTREE,KEY `idx_contract_oppo`,KEY `idx_company_code`
) ENGINE=InnoDB AUTO_INCREMENT= DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='合同分公司明细表';

主要索引说明

  • idx_contract_company联合索引顺序 contract_code> company_code> delete_flag
  • 索引特性这方面。仅最左前缀可用于缩小扫描区间,非连续字段仅可用于索引下推过滤,无法裁剪扫描范围

二、目标业务SQL

本次调整分析的主要查询SQL,业务需求:根据指定合同号、有效数据状态,查询合同关联项目编码。

SELECT contract_code,project_code
FROM contract_company_info
WHERE delete_flag = AND contract_code IN;

三、默认执行计划分析

原始执行计划结果

未添加任何强制索引时MySQL调整器默认选择全表扫描:

执行计划逐字段解析

  • type=ALL: 全表扫描,未使用任何二级索引。
  • possible_keys: 调整器识别到可用索引 idx_contract_company、idx_contract_oppo
  • rows=...: 预估扫描全表近80万行数据。话说回来,
  • Extra=Using where: Server层过滤数据。无索引调整,

默认走全表扫描的主要原因

Mysql 基于CBO 。决策流程如下:

  1. 现有索引 idx_contract_company = 不包含查询字段 `project_code',必须回表读取聚簇数据。
  2. 回表产生随机IO成本远高于顺序IO;信息预计大部分行需回表,
  3. 全表顺序遍历在Buffer Pool中几乎完全驻留内存,效率极高。
  4. 全表顺序IO成本低于“走二级+随机回表”。默认选全表,
    • **痛点**的观点是。在业务高频查询中,全表扫描导致CPU/IO浪费,响应时间显著延长。其实,

四、强制索引执行计划深度分析

强制索引SQL

EXPLAIN SELECT contract_code。project_code
FROM contract_company_info FORCE INDEX
WHERE delete_flag = AND contract_code IN;

强制索引执行计划结果

-->

主要字段逐行解析
    • . **type=range** – “IN” 查询被调整为范围扫描,可命中二级索引。**痛点**:虽然避免了全量扫,但仍需遍历数十万条记录。}
    • . **key_len=259** – 表示只使用了最左前缀列 ;后面的列因非连续而被忽略。**痛点**:delete_flag 的过滤条件未参与裁剪,只能在 ICP 阶段后期才生效。}
    • . **rows=404811** – 索引用法估算,仅依据最左前缀字段;实际匹配行数远大或小于此值。**痛点**:此数字直接影响成本计算与调优方向,却往往与真实情况相差甚远。}
    • . **Extra**
      • : 将 delete_flag 的过滤逻辑下沉到 InnoDB 引擎层。在遍历期间即去掉不符合的数据,从而降低回表次数。
      • : 把主键 ID 按升序排列。以顺序方式访问聚簇页,将随机 IO 转为顺序 IO,明显提高 I/O 效率。**痛点**:ICP 与 MRR 能降低 IO 成本。但并未减少需要扫描的键记录数,只是让每个记录更“友好”。}
      --- End of h4 section --- -->
      -->

      五、真实数据实测验证

      索 引 扫描 行 数 与 有效 数据 行 数 的巨大差异,从而说明 调整 器误判 根源。

      仅 contract\_code 条件

      SELECT COUNT FROM contract_company_info WHERE contract_code IN;/* 实测结果 */
      /* …*/
      /* ... */
      实测结果 : …(真实 索 引 扫描 总 行 数,调整 器 对 应 的 rows = …) */
      

      带 delete\_flag 有效 条件 sql SELECT COUNT FROM contract\_company\_info WHERE delete\_flag = …AND contract\_code IN;话说回来,实测结果 : …* * *

      六、调整器执行计划决策与 rows 估算机制

      调整 器为何 默认选 择 全 表 扫描?

      MySQL CBO 完全基 于 成 本 模 型 做 出 决策,而不是“一定要 用 索 引”。 当两条方法都可达时它会比较:
      • IO 成本 – 随机 IO 大约是 顺序 IO 的四倍;回 表 所需 随机 IO 极 高;
      • CPU 成本 – 内存中的 字段 筛选 与 排 序 等 操 作 成 本 极 小。

      两种执行方法的成本对比

      1. 走 二级 索 引 + 回 表

        • 索 引 扫描约 404 811 条记录;
        • 每条记录若需 回 表,则 为 随机 I/O;
        • 总成本 ≈ “范围 + 大量 随机 回 表”。
      2. 全 表 顺 序 扫描

        • 顺 序 遍历 ~ 800 000 条聚簇 页;
        • 若 已 在 Buffer Pool,则 几乎 无 I/O;
        • 总成本 ≈ “一次 顺 序 I/O + 少量 CPU”。
      如果 CBO 根据 全局 平均 值 推断 前者 更贵,则会选择 后者。说起来,

      决策 偏 差 的 核 心 原 因: 局 部 数据 倾 向

# Name Description
#1 | query_type | simple |
| table | contract_company_info |
| type | range |
| possible_keys | idx_contract_company |
| key | idx_contract_company |
| key_len |259 |
| rows|404811|
| Extra| Using index condition;Rowid-ordered scan|
场景 全局视角 局部视角
删除 标记 大多数 为 0 → 限制 准确性低 在这两个 合同 编号 下多数 为已 删除 → ICP 可 大幅 剔 除

CBO 无法 感知「这两个 合同 编号 下 特别 多已删除」的 情况。从而 做出 错误 决策,


EXPLAIN 中 rows 值 的 源 起 原 理

  • 当 type=ALL 时 → rows ≈ 表 总行数;
  • 当走 二级 索 引 时 → rows = 根据 最左 连续 前缀 字段 列值 分布 推断 出 的 行 数;后面 非 连续 字段 不参与。

为什么 EXPLAIN 的 rows 只 看 索 引 前缀?说起来,

因为它只关注 能够 缩 小 区间 的 字段;老实说,非 连续 字段只能 在 “下 推” 阶段起作用。而不改变 “预估 行 数”。


调整 器 默认选错执行方案 的 根 本 原 因

  • 基 于 全局 状态 而 非 局部 数据 分布;
  • 对 “删除 标记” 的 高 基 确率 没 有 正确 调整。

七、全方案性能对比

    
执行方案 类型 关键指标 主要特性 性能评级 
# index scans # lookups 
默认全 表 扫描  ≈80 万 行 0 次 无 Index / 顺 序 I/O / 内 存 遍 历 低 ★★☆☆☆ ★★☆☆☆ ★★☆☆☆ ★★☆☆☆ ★★☆☆☆ ★★☆☆☆ ★★☆☆☆ ★★☆☆☆ ☆★★★★ ☆★★★★ ☆★★★★ ☆★★★✖️ ✖️✖️ ✖️✖️ ✖️✖️ ✖️✖️ ✖️✖️ ✖️✖️ ✖️✖︎ ✪★★★ ✪★★★ ★★★❌ ❌❌ ❌❌ ❌❌ ❌❌ ❌❌ ❌❌ ❌❂ 🔴🔴 🔴🔴 🔴🔴 🔴🔴 🔴🔴 🔴🔴 🔴🔴 ⚠⚠⚠ ⚠⚠⚠ ⚠⚠⚠ ⚠⚠⚠ ⚔⚔⚔ ⚔⚔⚔ ⚔⚔⚔ ⚓🌊🌊 🌊🌊🌊 🌊🌊🌊 🌊🌊🌆 🌕💰 💰💰 💰💰 💰💰 💵💵 💵💵 💵💵 💥💥 💥💥 ⛽⛽⛽ ⛽⛽⛽ ⛈⛈⛈ ⛈⛈⛈ 🧩🧩🧩 🧩🧩🧩 🧪🧪🧪 🧪🧪🧪 🦾🦾🦾 🦾🦾🦾 📯📯📯 📯📯📯 📞📞📞 📞📞📞 📣📣📣 📣📣📣 👂👂👂 👂👂👂 🚑🚑🚑 🚑🚑🚑 🚨🚨🚨 🚨🚨🚨 ☁☁☁ ☁☁☁ ☃☃☃ ☃☃☃ ☎☎☎☎☎☎' /> ...
• : ICP 提高了 回 表 效率,但 并 未 削减 扫 描 行 数;覆盖 索 引 能 覆盖 所有 必 要 列,从根本上 消除了 回 表 与 ICP 双重开销。—— 对 高频 查询 这 是 唯 一 真 正 可 比 性 性能 提高。如果仅依赖 ICP 或 MRR,当 数据 分布 笼络 或 容量 增 长 时很容易 出现 性能 崩 潜 势力。                                                                                                                                                                                                                                                                      ├─────── ├─────── ├─────── ├─────── ├───────┘"


八、最终主要结论

  1. EXPLAIN 中 rows 值仅由最左连续前缀列估算;ICP 等下推策略不会改变该预测值。​ 若忽略此限制,就会低估真正的I/O负载。​ ◉​ ◉​ ◉​ ◉​ ◉​ ◉​ ◉​ ◉​ ◉​ ◻︎◻︎◻︎◻︎◻︎◻︎   ‭  ‼‶ ‼‶ ‼‡ ‶‡‡ ‶‡‡‶‡‡ ‶‡‡ ‶††† ††† ††† ††† ††† †‚‚‚ †‚‚‚ †‚‚‚ †‚‚‚ †�?,?.

  • ICP 是一种“减回报”型调整。仅减少回查次数,而不能减少整体所扫取的键记录数。​ 当需要遍历百万级别键时即使全部被过滤,也无法节省一次完整遍历过程中的 CPU/IO 开销。.
  • CBO 对局部倾斜缺乏感知。一旦出现 “某些关键列高度偏斜”,就可能误判“走二级+随机回查”更贵,从而默认选择全库扫。​ 在高并发场景里这种误判可能导致响应时间骤增,甚至超时错误抛出!..
  • 针对业务高频且常用列完全覆盖的场景。应优先创建覆盖式覆盖 Index,从根本上消除回查和 ICP 双重负荷,实现零开销快速返回。再看例如,CREATE INDEX idxproject ON contractcompany_info`——仅存两列就可以完成业务需求。无需再访问聚簇页,​ 如果不这样做。即使有多种高级技巧也只能把问题降到“可以接受”的水平,却无法真正突破瓶颈!..

  • 标签: 索引

    SEO优化服务概述

    作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。

    百度官方合作伙伴 白帽SEO技术 数据驱动优化 效果长期稳定

    SEO优化核心服务

    网站技术SEO

    • 网站结构优化 - 提升网站爬虫可访问性
    • 页面速度优化 - 缩短加载时间,提高用户体验
    • 移动端适配 - 确保移动设备友好性
    • HTTPS安全协议 - 提升网站安全性与信任度
    • 结构化数据标记 - 增强搜索结果显示效果

    内容优化服务

    • 关键词研究与布局 - 精准定位目标关键词
    • 高质量内容创作 - 原创、专业、有价值的内容
    • Meta标签优化 - 提升点击率和相关性
    • 内容更新策略 - 保持网站内容新鲜度
    • 多媒体内容优化 - 图片、视频SEO优化

    外链建设策略

    • 高质量外链获取 - 权威网站链接建设
    • 品牌提及监控 - 追踪品牌在线曝光
    • 行业目录提交 - 提升网站基础权威
    • 社交媒体整合 - 增强内容传播力
    • 链接质量分析 - 避免低质量链接风险

    SEO服务方案对比

    服务项目 基础套餐 标准套餐 高级定制
    关键词优化数量 10-20个核心词 30-50个核心词+长尾词 80-150个全方位覆盖
    内容优化 基础页面优化 全站内容优化+每月5篇原创 个性化内容策略+每月15篇原创
    技术SEO 基本技术检查 全面技术优化+移动适配 深度技术重构+性能优化
    外链建设 每月5-10条 每月20-30条高质量外链 每月50+条多渠道外链
    数据报告 月度基础报告 双周详细报告+分析 每周深度报告+策略调整
    效果保障 3-6个月见效 2-4个月见效 1-3个月快速见效

    SEO优化实施流程

    我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:

    1

    网站诊断分析

    全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。

    2

    关键词策略制定

    基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。

    3

    技术优化实施

    解决网站技术问题,优化网站结构,提升页面速度和移动端体验。

    4

    内容优化建设

    创作高质量原创内容,优化现有页面,建立内容更新机制。

    5

    外链建设推广

    获取高质量外部链接,建立品牌在线影响力,提升网站权威度。

    6

    数据监控调整

    持续监控排名、流量和转化数据,根据效果调整优化策略。

    SEO优化常见问题

    SEO优化一般需要多长时间才能看到效果?
    SEO是一个渐进的过程,通常需要3-6个月才能看到明显效果。具体时间取决于网站现状、竞争程度和优化强度。我们的标准套餐一般在2-4个月内开始显现效果,高级定制方案可能在1-3个月内就能看到初步成果。
    你们使用白帽SEO技术还是黑帽技术?
    我们始终坚持使用白帽SEO技术,遵循搜索引擎的官方指南。我们的优化策略注重长期效果和可持续性,绝不使用任何可能导致网站被惩罚的违规手段。作为百度官方合作伙伴,我们承诺提供安全、合规的SEO服务。
    SEO优化后效果能持续多久?
    通过我们的白帽SEO策略获得的排名和流量具有长期稳定性。一旦网站达到理想排名,只需适当的维护和更新,效果可以持续数年。我们提供优化后维护服务,确保您的网站长期保持竞争优势。
    你们提供SEO优化效果保障吗?
    我们提供基于数据的SEO效果承诺。根据服务套餐不同,我们承诺在约定时间内将核心关键词优化到指定排名位置,或实现约定的自然流量增长目标。所有承诺都会在服务合同中明确约定,并提供详细的KPI衡量标准。

    SEO优化效果数据

    基于我们服务的客户数据统计,平均优化效果如下:

    +85%
    自然搜索流量提升
    +120%
    关键词排名数量
    +60%
    网站转化率提升
    3-6月
    平均见效周期

    行业案例 - 制造业

    • 优化前:日均自然流量120,核心词无排名
    • 优化6个月后:日均自然流量950,15个核心词首页排名
    • 效果提升:流量增长692%,询盘量增加320%

    行业案例 - 电商

    • 优化前:月均自然订单50单,转化率1.2%
    • 优化4个月后:月均自然订单210单,转化率2.8%
    • 效果提升:订单增长320%,转化率提升133%

    行业案例 - 教育

    • 优化前:月均咨询量35个,主要依赖付费广告
    • 优化5个月后:月均咨询量180个,自然流量占比65%
    • 效果提升:咨询量增长414%,营销成本降低57%

    为什么选择我们的SEO服务

    专业团队

    • 10年以上SEO经验专家带队
    • 百度、Google认证工程师
    • 内容创作、技术开发、数据分析多领域团队
    • 持续培训保持技术领先

    数据驱动

    • 自主研发SEO分析工具
    • 实时排名监控系统
    • 竞争对手深度分析
    • 效果可视化报告

    透明合作

    • 清晰的服务内容和价格
    • 定期进展汇报和沟通
    • 效果数据实时可查
    • 灵活的合同条款

    我们的SEO服务理念

    我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。

    提交需求或反馈

    Demand feedback