标签频道
索引设计
该标签下的文章、提问与讨论帖。
一、现象或背景 做了 10 年数据库平台工程,最常被问的一句话是"这个查询慢,加个索引就好了吧?" 但加索引从来不是免费的。我亲历过三个典型的"加了索引反而更差"的事故: - 订单表加了第 9 个二级索引后,批量写入 P99 从 12ms
结论先行 **MySQL 8.0.13+ 的表达式索引(Functional Index)让 "WHERE UPPER(email) = ?"、"WHERE JSON_EXTRACT(payload, '$.status') = ?"、"W
【背景】 做了 10 年数据库平台工程,最常被问的一句话是"这个查询慢,加个索引就好了吧?" 但加索引从来不是免费的。我亲历过三个典型的"加了索引反而更差"的事故: - 订单表加了第 9 个二级索引后,批量写入 P99 从 12ms 涨到
【背景】 做了 8 年 DBA,最常被开发同学拿来"拍板"的一句话是:"这个 SQL 慢,你加个索引不就完事了?" 我见过太多这样的链路: - 一个订单列表接口,一次请求拆成 12 条子查询(N+1 的变体),单条 P50 只有 3ms,但
先说结论:我见过绝大多数团队的索引数量是"长"出来的,不是"算"出来的。加的时候有理由,减的时候没流程。而写放大的代价是隐性的、持续的、累积的——你永远不会收到一条"你的第 7 个二级索引今天又让 INSERT 慢了 0.3ms"的告警,但
«结论先行:MySQL 8.0.13+ 的表达式索引(Functional Index)让 "WHERE UPPER(email) = ?"、"WHERE JSON_EXTRACT(payload, '$.status') = ?"、"WH
«结论先行:复合索引的列顺序不是「按选择性从高到低排」,而是被「等值列 → 范围/排序列 → 覆盖列」这三段结构锁死的。我见过太多团队把高选择性列放第一列、结果 "type" 还是 "ALL";也见过有人为了省回表把大字段塞进索引,反而把
【背景】 MySQL 8.0.32 / InnoDB,单主 32C128G,innodb_buffer_pool_size=96G。核心表 t_settlement 约 1.2 亿行,当前含 PK + 4 个二级索引(idx_merchan
【背景】 做了 5 年 DBA,我手上处理过最典型的场景:业务侧接口 P99 飙了,工单甩过来一句「慢查询,麻烦看看」。打开 explain,其实问题很清晰——一个 2000 万行的订单表,走了全表扫描,但加不加索引、谁来加、谁来改代码,团
【背景】 做了 5 年大数据平台,80% 的工单是「这条 SQL 慢」。团队里有一个不成文的默认动作:先 EXPLAIN,看到 type=ALL 或 rows 很大,就加索引。我早期也这么干,直到去年一次「加完索引 P99 反而涨了 12%
文
标题
摘要