索引为什么重要#
没有索引的表扫描是 O(n) 的,数据量上来后查询会急剧变慢。合理的索引能把查询降到 O(log n)。
先看执行计划#
EXPLAIN ANALYZE SELECT * FROM orders WHERE user_id = 42;通过执行计划判断是顺序扫描还是索引扫描,再决定是否建索引。
常用索引类型#
- B-tree:默认索引,适合等值查询与范围查询
- GIN:适合全文检索与数组/JSON 包含查询
- BRIN:适合按物理顺序排列的大表
常见误区#
- 过度建索引:写放大、占用存储
- 对低选择性列建索引:收益有限
- 忘掉复合索引列顺序:最左前缀原则
小结#
索引优化没有银弹,从执行计划出发,配合 pg_stat_user_indexes 观察实际使用情况,才能做出合理决策。

