大量删除后 B+ 树索引为什么会出现空洞和性能下降,如何重建?
大量删除后 B+ 树索引为什么会出现空洞和性能下降,如何重建? 本文先给出可直接复述的结论,再用最小代码说明索引 空洞 碎片 REINDEX的工作方式、判断依据、项目边界和常见误区。
数据库 · 数据库索引面试题第 1 页,显示第 1–47 题,共找到 47 道完整解析,可继续按分类、标签与关键词缩小范围。
按稳定语义路径排序
大量删除后 B+ 树索引为什么会出现空洞和性能下降,如何重建? 本文先给出可直接复述的结论,再用最小代码说明索引 空洞 碎片 REINDEX的工作方式、判断依据、项目边界和常见误区。
为什么 B+ 树索引的高度通常只有 3~4 层就能支撑千万级数据? 本文先给出可直接复述的结论,再用最小代码说明B+树 高度 扇出 千万级数据的工作方式、判断依据、项目边界和常见误区。
B+ 树索引在插入时发生页分裂会带来什么性能影响,如何缓解? 本文先给出可直接复述的结论,再用最小代码说明B+树 页分裂 插入性能的工作方式、判断依据、项目边界和常见误区。
MySQL/PostgreSQL 的 B+ 树索引是如何组织并支持等值查找的? 本文先给出可直接复述的结论,再用最小代码说明B+树索引 结构 查找的工作方式、判断依据、项目边界和常见误区。
B 树和 B+ 树有什么区别,为什么数据库索引普遍选用 B+ 树? 本文先给出可直接复述的结论,再用最小代码说明B树 B+树 区别 数据库索引的工作方式、判断依据、项目边界和常见误区。
聚簇索引和二级索引在回表查询上有什么本质差异? 本文先给出可直接复述的结论,再用最小代码说明聚簇索引 二级索引 回表的工作方式、判断依据、项目边界和常见误区。
复合索引 (a, b, c) 的最左前缀原则具体是如何生效的? 本文先给出可直接复述的结论,再用最小代码说明复合索引 最左前缀原则的工作方式、判断依据、项目边界和常见误区。
复合索引 (a, b) 能避免 ORDER BY b 排序吗,什么条件下可以? 本文先给出可直接复述的结论,再用最小代码说明复合索引 ORDER BY 排序 索引顺序的工作方式、判断依据、项目边界和常见误区。
设计复合索引时,等值列和范围列的先后顺序应该怎么排? 本文先给出可直接复述的结论,再用最小代码说明复合索引 列顺序 等值 范围的工作方式、判断依据、项目边界和常见误区。
对经常组合查询的两个列,建复合索引和建两个单列索引哪种更好? 本文先给出可直接复述的结论,再用最小代码说明复合索引还是两个单列索引 index merge的工作方式、判断依据、项目边界和常见误区。
什么是覆盖索引,它为什么能显著减少查询耗时? 本文先给出可直接复述的结论,再用最小代码说明覆盖索引 回表 减少IO的工作方式、判断依据、项目边界和常见误区。
PostgreSQL 的 INCLUDE 非键列和直接加进索引键有什么区别? 本文先给出可直接复述的结论,再用最小代码说明PostgreSQL INCLUDE 覆盖索引 非键列的工作方式、判断依据、项目边界和常见误区。
PostgreSQL 的 Index-Only Scan 为什么有时仍然要访问堆表? 本文先给出可直接复述的结论,再用最小代码说明Index-Only Scan visibility map PostgreSQL的工作方式、判断依据、项目边界和常见误区。
用覆盖索引消除回表时,把很多列塞进索引会带来什么代价? 本文先给出可直接复述的结论,再用最小代码说明覆盖索引 代价 写放大 索引膨胀的工作方式、判断依据、项目边界和常见误区。
EXPLAIN 和 EXPLAIN ANALYZE 的区别是什么,生产环境用后者要注意什么? 本文先给出可直接复述的结论,再用最小代码说明EXPLAIN ANALYZE 区别 实际执行的工作方式、判断依据、项目边界和常见误区。
EXPLAIN (ANALYZE, BUFFERS) 里的 shared hit 和 read 分别说明什么? 本文先给出可直接复述的结论,再用最小代码说明EXPLAIN BUFFERS shared hit read 缓存命中的工作方式、判断依据、项目边界和常见误区。
EXPLAIN 输出中的 cost=0.00..8.27 两个数字分别代表什么? 本文先给出可直接复述的结论,再用最小代码说明EXPLAIN cost 启动成本 总成本的工作方式、判断依据、项目边界和常见误区。
MySQL 的 FORCE INDEX 什么时候应该使用,长期依赖它有什么风险? 本文先给出可直接复述的结论,再用最小代码说明FORCE INDEX 强制索引 风险的工作方式、判断依据、项目边界和常见误区。
EXPLAIN 估算的 rows 和实际行数差几个数量级时该怎么定位原因? 本文先给出可直接复述的结论,再用最小代码说明EXPLAIN rows 估算与实际行数偏差排查的工作方式、判断依据、项目边界和常见误区。
EXPLAIN 出现 Seq Scan 一定说明索引失效了吗? 本文先给出可直接复述的结论,再用最小代码说明Seq Scan 全表扫描 索引未生效的工作方式、判断依据、项目边界和常见误区。
表达式索引如何解决 WHERE lower(email) = ? 这类查询的索引问题? 本文先给出可直接复述的结论,再用最小代码说明表达式索引 函数索引 lower的工作方式、判断依据、项目边界和常见误区。
IN 列表很长时为什么优化器可能放弃索引转而全表扫描? 本文先给出可直接复述的结论,再用最小代码说明IN列表过长 优化器放弃索引 全表扫描的工作方式、判断依据、项目边界和常见误区。
LIKE '%abc' 前导通配符为什么用不上普通 B 树索引,有哪些替代方案? 本文先给出可直接复述的结论,再用最小代码说明LIKE 前导百分号 索引失效 替代的工作方式、判断依据、项目边界和常见误区。
有索引时嵌套循环连接为什么会比哈希连接更快,什么条件下反转? 本文先给出可直接复述的结论,再用最小代码说明nested loop hash join 索引 执行计划的工作方式、判断依据、项目边界和常见误区。
对索引列使用函数或隐式类型转换为什么会导致索引失效? 本文先给出可直接复述的结论,再用最小代码说明索引列 函数 类型转换 索引失效的工作方式、判断依据、项目边界和常见误区。
IS NULL 查询能用上 B 树索引吗,PostgreSQL 和 MySQL 行为有何差异? 本文先给出可直接复述的结论,再用最小代码说明IS NULL 索引 NULL 存储的工作方式、判断依据、项目边界和常见误区。
WHERE a = 1 OR b = 2 为什么常常导致索引利用率差,怎么改写? 本文先给出可直接复述的结论,再用最小代码说明OR 条件 索引失效 UNION 改写的工作方式、判断依据、项目边界和常见误区。
PostgreSQL 部分索引适合什么场景,比全索引有什么优势? 本文先给出可直接复述的结论,再用最小代码说明部分索引 partial index 适用场景的工作方式、判断依据、项目边界和常见误区。
为什么复合索引中范围条件会让其后的列无法继续用于精确定位? 本文先给出可直接复述的结论,再用最小代码说明复合索引 范围条件 后续列失效的工作方式、判断依据、项目边界和常见误区。
什么是索引选择性,选择性低到什么程度索引就不值得用了? 本文先给出可直接复述的结论,再用最小代码说明索引选择性 低基数 性别列的工作方式、判断依据、项目边界和常见误区。
优化器如何估算一个 LIKE 'abc%' 条件会过滤出多少行? 本文先给出可直接复述的结论,再用最小代码说明选择性估算 直方图 MCV PostgreSQL的工作方式、判断依据、项目边界和常见误区。
复合索引里应该把高选择性列放前面吗,这个常见说法对不对? 本文先给出可直接复述的结论,再用最小代码说明复合索引 列顺序 选择性 规则的工作方式、判断依据、项目边界和常见误区。
MySQL 8.0 的索引跳跃扫描能在什么条件下绕过最左前缀限制? 本文先给出可直接复述的结论,再用最小代码说明MySQL 8.0 Index Skip Scan 最左前缀的工作方式、判断依据、项目边界和常见误区。
ORDER BY a ASC, b DESC 时为什么单列复合索引可能帮不上忙? 本文先给出可直接复述的结论,再用最小代码说明复合索引 混合排序方向 ASC DESC的工作方式、判断依据、项目边界和常见误区。
MySQL 的 filesort 是什么,它是额外文件排序吗? 本文先给出可直接复述的结论,再用最小代码说明filesort 排序 内存 磁盘的工作方式、判断依据、项目边界和常见误区。
GROUP BY 能借助索引避免排序吗,条件是什么? 本文先给出可直接复述的结论,再用最小代码说明GROUP BY 索引 排序 松散索引扫描的工作方式、判断依据、项目边界和常见误区。
为什么 ORDER BY ... LIMIT n 在有合适索引时只需扫描少量行? 本文先给出可直接复述的结论,再用最小代码说明ORDER BY LIMIT 索引 提前返回的工作方式、判断依据、项目边界和常见误区。
PostgreSQL 排序溢出到磁盘在 EXPLAIN 中怎么看,如何调优? 本文先给出可直接复述的结论,再用最小代码说明work_mem 排序溢出 Sort Method external merge的工作方式、判断依据、项目边界和常见误区。
ANALYZE 采集的统计信息包含哪些内容,过期统计会导致什么后果? 本文先给出可直接复述的结论,再用最小代码说明ANALYZE 统计信息 执行计划 过期的工作方式、判断依据、项目边界和常见误区。
PostgreSQL 多列强相关时单列统计为何会严重低估行数,怎么解决? 本文先给出可直接复述的结论,再用最小代码说明多列统计信息 相关性 CREATE STATISTICS的工作方式、判断依据、项目边界和常见误区。
为什么大批量数据变更后执行计划突然变差,如何排查统计信息问题? 本文先给出可直接复述的结论,再用最小代码说明执行计划 突然变慢 统计信息 排查的工作方式、判断依据、项目边界和常见误区。
default_statistics_target 调大对执行计划质量有什么影响? 本文先给出可直接复述的结论,再用最小代码说明default_statistics_target 采样 计划质量的工作方式、判断依据、项目边界和常见误区。
唯一索引和普通索引在查询性能和写入开销上有差别吗? 本文先给出可直接复述的结论,再用最小代码说明唯一索引 vs 普通索引 性能的工作方式、判断依据、项目边界和常见误区。
为什么不建议在每张表的每个列上都建索引? 本文先给出可直接复述的结论,再用最小代码说明为什么不给每列建索引 索引写入开销的工作方式、判断依据、项目边界和常见误区。
查找「没有订单的客户」时 NOT EXISTS、NOT IN 和 LEFT JOIN ... IS NULL 哪个更稳妥? 本文先给出可直接复述的结论,再用最小代码说明SQL 反连接 NOT EXISTS NOT IN LEFT JOIN IS NULL的工作方式、判断依据、项目边界和常见误区。
多对多连接时 SQL JOIN 为什么会产生重复行,如何诊断并消除? 本文先给出可直接复述的结论,再用最小代码说明SQL JOIN 重复行 一对多 笛卡尔 诊断的工作方式、判断依据、项目边界和常见误区。
为什么只写 LIMIT 不写 ORDER BY 的查询结果不可依赖,即使多次执行看起来一样? 本文先给出可直接复述的结论,再用最小代码说明LIMIT 无 ORDER BY 结果不确定 顺序的工作方式、判断依据、项目边界和常见误区。