索引
理论:索引;失效与优化思路可对照 MySQL 索引与失效。
索引类型
| 类型 | 适用场景 |
|---|---|
| B-tree | 默认,等值/范围查询,=、<、>、BETWEEN |
| Hash | 纯等值查询,不支持范围,较少使用 |
| GIN | 全文搜索、JSONB、数组的包含查询 |
| GiST | 地理数据(PostGIS)、几何类型、范围类型 |
| BRIN | 超大表的顺序写入字段(如时间戳),体积极小 |
示例
-- 普通 B-tree
CREATE INDEX idx_user_name ON users(name);
-- 唯一索引
CREATE UNIQUE INDEX idx_user_email ON users(email);
-- JSONB 的 GIN 索引(支持 @>、? 等操作)
CREATE INDEX idx_products_attrs ON products USING GIN(attrs);
-- 全文搜索 GIN 索引
CREATE INDEX idx_articles_tsv ON articles USING GIN(to_tsvector('english', content));
-- 部分索引(只索引满足条件的行,减小索引体积)
CREATE INDEX idx_active_users ON users(name) WHERE status = 'active';
-- 表达式索引(对函数结果建索引)
CREATE INDEX idx_lower_email ON users(LOWER(email));全文搜索用法见 高级查询。