[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"article-deep-evm-27-postgresql-xingneng-suoyin-vacuum-youhua":3},{"article":4,"author":54},{"id":5,"category_id":6,"title":7,"slug":8,"excerpt":9,"content_md":10,"content_html":11,"locale":12,"author_id":13,"published":14,"published_at":15,"meta_title":16,"meta_description":9,"focus_keyword":17,"og_image":18,"canonical_url":18,"robots_meta":19,"created_at":15,"updated_at":15,"tags":20,"category_name":23,"related_articles":34},"d3000000-0000-0000-0000-000000000127","a0000000-0000-0000-0000-000000000035","Deep EVM #27：PostgreSQL大规模性能——索引、VACUUM和查询优化","deep-evm-27-postgresql-xingneng-suoyin-vacuum-youhua","PostgreSQL大规模性能优化：索引策略、VACUUM调优和查询计划分析。","## 索引策略\n\nPostgreSQL支持多种索引类型，每种适用于不同场景：\n\n### B-tree索引\n默认索引类型，适合等值和范围查询：\n```sql\nCREATE INDEX idx_users_email ON users (email);\n```\n\n### GIN索引\n适合JSONB和全文搜索：\n```sql\nCREATE INDEX idx_articles_tags ON articles USING GIN (tags);\n```\n\n### 部分索引\n只索引满足条件的行，节省空间和提升性能：\n```sql\nCREATE INDEX idx_active_users ON users (email) WHERE active = true;\n```\n\n## VACUUM\n\nPostgreSQL的MVCC机制产生死行。VACUUM回收这些空间：\n\n- **VACUUM** — 标记死行空间可复用\n- **VACUUM FULL** — 完全重写表，回收所有空间（锁表）\n- **autovacuum** — 自动运行的后台VACUUM\n\n### 调优autovacuum\n```sql\nALTER TABLE large_table SET (\n    autovacuum_vacuum_scale_factor = 0.01,  -- 默认0.2\n    autovacuum_analyze_scale_factor = 0.005\n);\n```\n\n## 查询优化\n\n使用EXPLAIN ANALYZE分析查询计划：\n```sql\nEXPLAIN ANALYZE SELECT * FROM orders WHERE user_id = 123 AND created_at > '2024-01-01';\n```\n\n关注：\n- Seq Scan vs Index Scan\n- 估算行数 vs 实际行数\n- 排序和哈希操作\n\n## 总结\n\nPostgreSQL在大规模下的性能取决于正确的索引策略、积极的VACUUM维护和基于查询计划的优化。这三者缺一不可。","\u003Ch2 id=\"\">索引策略\u003C\u002Fh2>\n\u003Cp>PostgreSQL支持多种索引类型，每种适用于不同场景：\u003C\u002Fp>\n\u003Ch3>B-tree索引\u003C\u002Fh3>\n\u003Cp>默认索引类型，适合等值和范围查询：\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-sql\">CREATE INDEX idx_users_email ON users (email);\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3>GIN索引\u003C\u002Fh3>\n\u003Cp>适合JSONB和全文搜索：\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-sql\">CREATE INDEX idx_articles_tags ON articles USING GIN (tags);\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3>部分索引\u003C\u002Fh3>\n\u003Cp>只索引满足条件的行，节省空间和提升性能：\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-sql\">CREATE INDEX idx_active_users ON users (email) WHERE active = true;\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2 id=\"vacuum\">VACUUM\u003C\u002Fh2>\n\u003Cp>PostgreSQL的MVCC机制产生死行。VACUUM回收这些空间：\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>VACUUM\u003C\u002Fstrong> — 标记死行空间可复用\u003C\u002Fli>\n\u003Cli>\u003Cstrong>VACUUM FULL\u003C\u002Fstrong> — 完全重写表，回收所有空间（锁表）\u003C\u002Fli>\n\u003Cli>\u003Cstrong>autovacuum\u003C\u002Fstrong> — 自动运行的后台VACUUM\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>调优autovacuum\u003C\u002Fh3>\n\u003Cpre>\u003Ccode class=\"language-sql\">ALTER TABLE large_table SET (\n    autovacuum_vacuum_scale_factor = 0.01,  -- 默认0.2\n    autovacuum_analyze_scale_factor = 0.005\n);\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2 id=\"\">查询优化\u003C\u002Fh2>\n\u003Cp>使用EXPLAIN ANALYZE分析查询计划：\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-sql\">EXPLAIN ANALYZE SELECT * FROM orders WHERE user_id = 123 AND created_at &gt; '2024-01-01';\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>关注：\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Seq Scan vs Index Scan\u003C\u002Fli>\n\u003Cli>估算行数 vs 实际行数\u003C\u002Fli>\n\u003Cli>排序和哈希操作\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2 id=\"\">总结\u003C\u002Fh2>\n\u003Cp>PostgreSQL在大规模下的性能取决于正确的索引策略、积极的VACUUM维护和基于查询计划的优化。这三者缺一不可。\u003C\u002Fp>\n","zh","b0000000-0000-0000-0000-000000000001",true,"2026-03-28T10:44:26.322070Z","PostgreSQL大规模性能——索引、VACUUM和查询优化","postgresql性能优化",null,"index, follow",[21,26,30],{"id":22,"name":23,"slug":24,"created_at":25},"c0000000-0000-0000-0000-000000000012","DevOps","devops","2026-03-28T10:44:21.513630Z",{"id":27,"name":28,"slug":29,"created_at":25},"c0000000-0000-0000-0000-000000000022","Performance","performance",{"id":31,"name":32,"slug":33,"created_at":25},"c0000000-0000-0000-0000-000000000005","PostgreSQL","postgresql",[35,42,48],{"id":36,"title":37,"slug":38,"excerpt":39,"locale":12,"category_name":40,"published_at":41},"d0000000-0000-0000-0000-000000000668","为什么Bali在2026年正在成为东南亚的影响力科技中心","weishenme-bali-2026-zhengzai-chengwei-dongnanya-yingxiangli-keji-zhongxin","Bali在东南亚创业生态系统中排名第16位。随着Web3构建者、AI可持续发展初创公司和生态旅游科技公司的集中，该岛正在打造区域影响力科技之都的独特定位。","工程","2026-03-28T10:44:48.898750Z",{"id":43,"title":44,"slug":45,"excerpt":46,"locale":12,"category_name":40,"published_at":47},"d0000000-0000-0000-0000-000000000667","ASEAN数据保护拼图：开发者合规清单","asean-shuju-baohu-pintu-kaifazhe-heguiqingdan","七个ASEAN国家现已拥有全面的数据保护法律，各自具有不同的同意模型、本地化要求和处罚结构。这是一份为构建多国应用程序的开发者准备的实用合规清单。","2026-03-28T10:44:48.893467Z",{"id":49,"title":50,"slug":51,"excerpt":52,"locale":12,"category_name":40,"published_at":53},"d0000000-0000-0000-0000-000000000666","Indonesia 290亿美元数字化转型：软件公司的机遇","indonesia-290yi-meiyuan-shuzihua-zhuanxing-ruanjian-gongsi-jiyu","Indonesia IT服务市场预计在2026年达到290.3亿美元，高于2025年的243.7亿美元。云基础设施、AI、电子商务和数据中心正在推动东南亚最快的增长。","2026-03-28T10:44:48.875457Z",{"id":13,"name":55,"slug":56,"bio":57,"photo_url":18,"linkedin":18,"role":58,"created_at":59,"updated_at":59},"Open Soft Team","open-soft-team","The engineering team at Open Soft, building premium software solutions from Bali, Indonesia.","Engineering Team","2026-03-28T08:31:22.226811Z"]