CentOS中PostgreSQL性能优化技巧
WHERE id = 1)和范围查询(如WHERE age > 18),是大多数场景的首选。tsvector列)、数组(如integer[])和JSONB数据,支持高效的集合查询。geometry列)、全文搜索(替代GIN用于长文本),支持复杂的范围查询。WHERE col1 = 'A' AND col2 = 'B'),将高频过滤列放在前面(如CREATE INDEX idx_col1_col2 ON table(col1, col2)),提高索引利用率。CREATE INDEX idx_partial_data ON table(data) WHERE data LIKE 'prefix%'),减少索引大小,提升查询效率。REINDEX INDEX idx_name重建碎片化索引(避免锁表可使用REINDEX TABLE CONCURRENTLY),并通过ANALYZE table更新索引统计信息,帮助优化器做出正确决策。EXPLAIN ANALYZE查看查询的执行步骤(如全表扫描、索引扫描、排序操作),识别性能瓶颈(如未使用索引的全表扫描)。SELECT *:只查询需要的列,减少数据传输量。JOIN代替子查询(如SELECT a.* FROM table_a a JOIN table_b b ON a.id = b.a_id WHERE b.status = 'active'),提高查询效率。WHERE子句中对列使用函数(如WHERE UPPER(name) = 'JOHN')会导致索引失效,可重写为WHERE name ILIKE 'john'或创建函数索引(如CREATE INDEX idx_upper_name ON table(UPPER(name)))。max_connections的70%)。max_parallel_workers_per_gather(每个查询的并行工作进程数,根据CPU核心数设置,如8核设为4)、parallel_tuple_cost(并行查询返回一行数据的成本,降低此值鼓励并行)和parallel_setup_cost(启动并行查询的成本,降低此值鼓励并行),提升大数据量查询的性能。checkpoint_completion_target(检查点完成的目标比例,设为0.7-0.9,平衡性能和恢复时间)和max_wal_size(WAL文件的最大大小,设为1-2GB,减少检查点频率),减少检查点对I/O的影响。autovacuum(默认开启),调整autovacuum_vacuum_cost_limit(自动VACUUM的成本限制,设为200-500)和autovacuum_vacuum_scale_factor(触发自动VACUUM的表数据变化比例,设为0.1-0.2),及时清理死行和更新统计信息,避免表膨胀。VACUUM ANALYZE(清理死行并更新统计信息),每周执行REINDEX(重建碎片化索引),每月检查表膨胀情况(通过pgstattuple扩展),确保数据库健康运行。