Update nexus wiki content
This commit is contained in:
46
wiki/concepts/QueryPlanAnalysis.md
Normal file
46
wiki/concepts/QueryPlanAnalysis.md
Normal file
@@ -0,0 +1,46 @@
|
||||
---
|
||||
title: "Query Plan Analysis"
|
||||
type: concept
|
||||
tags: [database, postgresql, explain, performance, query-optimization]
|
||||
last_updated: 2026-05-01
|
||||
---
|
||||
|
||||
# Query Plan Analysis
|
||||
|
||||
## Definition
|
||||
|
||||
查询计划分析是通过 `EXPLAIN ANALYZE` 命令解读数据库优化器生成的查询执行计划,识别性能瓶颈(如 Seq Scan 全表扫描、估算偏差大)并针对性优化的方法。
|
||||
|
||||
## Key Scan Types
|
||||
|
||||
| 扫描类型 | 评估 | 说明 |
|
||||
|---------|------|------|
|
||||
| **Seq Scan** | ⚠️ 差 | 全表扫描,通常意味着缺索引 |
|
||||
| **Index Scan** | ✅ 好 | 索引扫描,直接定位数据 |
|
||||
| **Bitmap Heap Scan** | 🟡 可接受 | 先索引定位再堆查,适合中等结果集 |
|
||||
| **Index Only Scan** | ✅ 最佳 | 完全在索引中完成,无需回表 |
|
||||
|
||||
## What to Look For
|
||||
|
||||
- **actual time vs estimated rows**:与估算差异大说明统计信息过时
|
||||
- **cost=... loops=...**:高 cost 或多次 loops 需优化
|
||||
- **Buffers: shared hit/read**:大量 read 说明缓存未命中
|
||||
- **Seq Scan on large tables**:大表全表扫描通常是问题信号
|
||||
|
||||
## Example
|
||||
|
||||
```sql
|
||||
EXPLAIN ANALYZE
|
||||
SELECT * FROM posts WHERE user_id = 123;
|
||||
|
||||
-- Good: Index Scan
|
||||
-- Bad: Seq Scan on posts (cost=0.00..1234.56 rows=500 width=...)
|
||||
```
|
||||
|
||||
## Source
|
||||
- [[engineering-database-optimizer]]
|
||||
|
||||
## Connections
|
||||
- [[IndexingStrategies]] — 根据分析结果创建/调整索引
|
||||
- [[N1QueryPrevention]] — EXPLAIN 识别 N+1 查询
|
||||
- [[SafeMigrations]] — 迁移前后验证查询性能
|
||||
Reference in New Issue
Block a user